泛型函数
TS 泛型函数示例:
function identify<T>(arg:T):T{
return arg;
}
上面的函数调用时:
1)显式指定类型: identify<string>("myString")
- 自动推断:
identify("myString")
泛型类型:
- 写法1:
let myIdentify: <T>(arg:T) => T= identify;
- 写法2:
let myIdentify: {<T>(arg:T):T} = identify;
泛型接口
从单函数接口:
interface GenericIdentifyFn{
<T>(arg:T):T;
}
// 使用
let myIdentify:GenericIdentifyFn = identify;
到泛型参数是整型接口的泛型。
interface GenericIdentifyFn<T>{
}
// 使用
let myIdentify: GenericIdentifyFn<number> = identify;
泛型类
示例如下:
class GenericNumber<T>{
zeroValue:T;
add: (x:T, y: T) => T;
}
let gm = new GenericNumber<number>();
带约束的泛型
示例:
interface ActionMenu{
title:string
}
function showActionMenus<T extends ActionMenu>(menus:Array<T>){
}
泛型约束中的类型参数
示例:
function getProperty(T, K extends keyof T>(obj:T,key:K){
return obj[key];
}
上例中,将 K
限制为 T 对象的属性键名。
泛型中使用Class 类型
示例:
通过 c:{new():T;}
限制参数应该为返回某类型对象的构造函数。
class Animal{}
class Dog extends Animal{}
class Cat extends Animal{}
function createAnimal<A extends Animal>(c: new() =>A):A{
return new c();
}
网友评论