TypeScript 泛型
泛型是可以在保证类型安全的前提下,让函数等与多重类型一起工作,从而实现复用。常用于:函数、接口、class中。
泛型在定义的时候并不知道具体是什么类型,只有在调用的时候才知道是什么类型。
如下:
/* 需求:定义一个getId方法,传入一个值,返回这个值 */ function getId<T>(val: T) { return val; } console.log(getId<number>(3));//在调用的时候才知道是什么意思
console.log(getId<boolean>(true));
console.log(getId<string>('abcdef'));
上述代码中<T>是声明泛型,而val:T是使用泛型。调用泛型的时候才指定数据类型。
同时上述调用时候getId后面的<number>是可以忽略的,因为调用的时候就会判断是什么类型了,可以简化一些。
给泛型添加接口约束。
/* 泛型中的接口约束 */ interface Ilength { length: number } function getId<T extends Ilength>(val:T) { console.log(val.length); return val; } getId('hello');
此时要传入字符类型,不能传入数字类型,因为字符类型有length,但是数字类型没有。
需求:定义一个函数,参数分别为对象和属性名,根据属性名返回属性值
function getProp<O, K extends keyof O>(obj: O, key: K) { return obj[key] } const p1 = { name:'yansunda', age:18 } console.log(getProp(p1, 'name'));
这个keyof表示取的K来自于O的属性。这样子才不会报错。