• TS编程——面向对象随手录——接口_命名空间——重构javaScrip 3D引擎代码部分——函数


    导出一个接口:

    export default interface Inner{
        fun():void;
    }
    
    • 1
    • 2
    • 3

    类去实现一个接口;
    实现的时候类型推导出已经引用:
    可以使用接口来确保类拥有指定的结构,约束对象,避免很多潜在的小错误。
    尤其在写字面量对象时

    import Inner from "./Interfaces";
    class person implements Inner{
        fun(): void {
            
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    命名空间

    命名空间,又称为内部模块,被用于组织一些就有某些内在联系的特性和对象。
    使得代码结构更清晰;
    可以使用namespace和export关键字。还有这个module,作用差不多!

    namespace Comment{
        interface Ia{
    
        }
        interface Ib{
    
        }
        interface Ic{
    
        }
        export class A implements Ia,Ib{
    
        }
        export class B implements Ia,Ic{
    
        }
        export function abc(){
    
        }
    }
    
    var obj1 = new Comment.A();
    var obj2 = new Comment.B();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    注意如果接口或者类,还是变量或者方法,没有在声明之前加export关键字。那么就在外部访问不到。


    上面例子就是一个简单的JavaScript 3D引擎代码的一小部分。在3D引擎中有大量的关于矩阵和矢量的计算。
    创建了一个Geometry模块,添加一些相关操作和计算;

    var obj:Geometry.Iv2 =new Geometry.Vv2(2,3)
    obj.normalize();
    obj.toArray(function(n:Array<number>){
        console.log("x:"+n[0]+"y:"+n[1]);
       
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    函数类型

    • 被赋值的变量类型和函数类型必须一致
    • 注意变量提示
    interface Ia{
        (name:string):string;
    }
    var fn:Ia= function Ia(a){
        return a
    }
    console.log(fn("aaa"));///aaa
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    有可选参数的函数
    值得注意的是可选参数必须位于必选参数列表的后面。
    增加其函数的灵活性

    function add(a:number,b:number,c?:number){
        var resulet:number = a+b;
        if(c !== undefined){
            resulet += c;
        } 
    }
    这里写错的话会有提示:类型推论
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    默认参数:
    默认参数位于必选参数之后
    undefined == void 0//true

    function add(a:number,b:number=0,c?:number){
        var resulet:number = a+b;
        if(c !== undefined){
            resulet += c;
        } 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    有剩余参数的函数
    开发者传递任意数量的参数
    一个剩余参数必须包含一个数组类型

    function add(...arr:Array<number>):number{
        var sum = arr.reduce((v,t)=>v+t);
        return sum;
    }
    
    • 1
    • 2
    • 3
    • 4

    函数重载:
    同名不同参数!!!!

    function test(value:(number|string|boolean)){
        switch(typeof value){
            case "string":
                return "value is string"
            case "number":
                return `${value} is number`
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    “查找”学习提纲(三)——总结
    MetaFormer-3
    Linux 上的 .NET 如何自主生成 Dump
    程序和进程
    docker compose 使用
    离线数仓-用户行为采集
    项目经理如何全过程实时跟踪项目进度
    leetcode34. 在排序数组中查找元素的第一个和最后一个位置
    【Hack The Box】linux练习-- Jarvis
    含氯甲基大孔径苯乙烯-二乙烯基苯微球/交联聚苯乙烯微球固载双齿席夫碱型氧钒(Ⅳ)
  • 原文地址:https://blog.csdn.net/m0_46672781/article/details/126374538