TS要点总结

240 阅读1分钟

写在前面:最近抽时间又把ts的泛型温习了一遍,发现还是有很多可以总结的点

  • ts在函数中的使用
let a = function(a: string): string | number {
        return arguments
}

let duck = (a:string, b:string):number => {
    return 99
}
  • 用interface描述一个函数
    interface Add {
        (a:number, b:number): number
    }
  • 泛型主要是以类型参数的形式,对参数和返回值进行约束,写几个泛型示例
    function model<U, T, P, M> (val1: U, val2: T, val3: P, val4: M):[U, T, P]{
        return [val1, val2, val3]
    }

写一个泛型接口

    interface commonFn<T> {
        (arg: T): T
    }

  • 泛型约束:顾名思义,为泛型添加约束,举个例子
    interface Lengthwise {
        length: number;
    }

    function loggingIdentity<T extends Lengthwise>(arg: T): T {
        console.log(arg.length);  
        return arg;
}

  • 泛型在类中的使用,举个例子
    class Queue<T> {
         arr: any[]
         constructor() {
            this.arr = []
        }
        push(item: T) {
            return this.arr.push(item)
        }
        pop(): T {
            return this.arr.shift()
    }
}
const queue = new Queue<number>()
  • 对于类型别名的使用
    type fuType = (val1: number, val2: number) => number
    let sum: fuType
  • 交叉类型的使用

318C3839-3C71-4E89-BE92-619991B23B9E.png

  • 对于字面量类型写法

FC175B83-4918-4848-BFE1-D12E8E1FF87F.png

  • 对于索引类型
    interface Arr {
        [k: string]: number
    }
    let arr1: Arr = {
        sf: 88,
        sff: 889
    }
  • 实现联合类型
    interface a {
        name: string;
        age: number;
    }
    interface b {
        height: number;
    }
    let man: a | b = {
        name: 'xiaotao',
        height: 33
    }
  • 为什么需要声明文件?

    对于基于js编写的库,需要有声明文件,这样ts才能针对库进行类型检查

  • 如何获取js库的声明文件?

    从这里查询到声明文件,www.typescriptlang.org/dt/search?s… 直接npm install 即可;也有可能声明文件库已经自带,则不需要install

  • 如何自己写一个声明文件?

7941ACA9-3952-44F3-BAEA-06D0D71D14D7.png

或者使用 tsc a.ts -d 生成声明文件