泛型变量
function log<T>(str: T): T {
return str;
}
泛型接口
interface Demo<U> {
(arg: U): U;
}
泛型类
class Demo<T> {
zeroValue: T;
add: (x: T, y: T) => T;
}
泛型约束
interface Lengthwise {
length: number
}
function log<T extends Lengthwise>(args: T): T {
console.log(args.length)
return args;
}
在泛型约束中使用类型参数
function getProperty<T>(obj: T, key: keyof T) {
return obj[key]
}
let x = { a: 1, b: 2, c: 3, d: 4 };
getProperty(x, "a");
getProperty(x, "m");
在泛型里使用类类型
function create<T>(c: {new(): T; }): T {
return new c();
}