前言: 泛型就是使用一个类型变量来表示一种类型,类型值通常是在使用的时候才会设置。泛型的使用场景很多,可以在函数、类、interface 接口中使用
1. 函数泛型
// 单个泛型 function demo<T>(a: T): T { return a; } demo(10); // 10 demo<number>(10); //10 // 多个泛型 function _demo<T, K>(a: T, b: K): T { return a; } _demo(1, "2"); // 1 _demo<number, string>(1, "2"); // 1
2. 类泛型
class Demo<T> { name: T; constructor(name: T) { this.name = name; } say(arg: T): void { console.log(`${this.name}, ${arg}`); } } const yq = new Demo<string>("yqcoder"); // Demo { name: 'yqcoder' } yq.say("你好"); // yqcoder, 你好
3. 接口泛型
interface IDemo<T, K> { name: T; age: K; say(str: T): void; } const yq: IDemo<string, number> = { name: "yqcoder", age: 18, say(str) { console.log(`${this.name}, ${str}`); }, }; // { name: 'yqcoder', age: 18, say: [Function: say] } yq.say("你好"); // yqcoder, 你好
4. 泛型约束
泛型可以通过 extends 一个接口来实现泛型约束,写法如:<泛型变量 extends 接口>
interface IDemo { length: number; } function demo<T extends IDemo>(arg: T): void { console.log(arg.length); } demo([1, 2, 3]); // 3 demo<number[]>([1,2,3]) // 3
上一章:前端 TS 快速入门之四:函数
下一章:前端 TS 快速入门之六:枚举 enum