写在前面:最近抽时间又把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
- 交叉类型的使用
- 对于字面量类型写法
- 对于索引类型
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
-
如何自己写一个声明文件?
或者使用 tsc a.ts -d 生成声明文件