背景
现在我们需要实现一个函数,返回任何传入它的值。
我们可能会这样做:
function identity(arg: any): any {
return arg;
}
这里有一个问题,便是我们不能严格控制入参与出参保持一致的类型。
因此我们需要用到泛型 generics
泛型
function identity<T>(arg: T): T {
return arg;
}
这是泛型函数的定义方式,使用方式则有如下两种:
let output = identity<string>("myString"); // type of output will be 'string'
let output = identity("myString"); // type of output will be 'string'
- 我们没必要使用尖括号(
<>
)来明确地传入类型;编译器可以查看myString
的值,然后把T
设置为它的类型
泛型数组
function loggingIdentity<T>(arg: T[]): T[] {
console.log(arg.length); // Array has a .length, so no more error
return arg;
}