无法创建泛型枚举和泛型命名空间
泛型变量T
相当与一个形参变量,只是它返回的是值的类型,传什么类型就返回什么类型,保证传入的值和返回的类型相同
1 2 3 4
| function test<T>(arg: T): T { return arg } let a = test<string>('arg')
|
泛型函数
1
| let mytest: {<T>(arg: T): T} = identity
|
1 2 3 4 5 6 7
| interface fnType{ <T>(arg : T) : T } function test<T>(arg: T): T { return arg } let mytest: fnType = test
|
泛型类 ClassName: 指的是实例部分的类型,类的静态属性不能使用
1 2 3 4 5
| class GenericNumber<T> { zeroValue: T add: (x: T, y: T) => T } let myGenericNumber = new GenericNumber<number>()
|
泛型约束
1 2 3
| function getProperty(obj: T, key: K){ return obj[key] }
|
在泛型里使用类类型: 使用泛型创建工厂函数时,需要引用构造函数的类类型
- 调用的函数可以调用继承父类的方法
- 使用场景: 多个类继承一个父类
- 定义:定义几个类和一个父类,然后创建多个子类继承父类,并且子类中将某个子类赋值给变量(这个变量要统一),这样就可以使用多个子类、某个类和父类的方法和变量
- 使用:createInstance(子类).父类方法.子类方法
1 2 3
| function createInstance<T extends 父类>(c: new() =>T): T { return new c(); }
|