定义一个接口来描述约束条件。 创建一个包含.length
属性的接口,使用这个接口和extends
关键字来实现约束。
函数式声明(function) 方式定义函数
interface Lengthwise {
length: number;
}
function loggingIdentity<T extends Lengthwise>(arg: T): T {
console.log(arg.length); // Now we know it has a .length property, so no more error
return arg;
}
函数表达式(函数字面量)
interface Lengthwise {
length: number;
}
const loggingIdentity = <T extends Lengthwise>(arg: T): T => {
console.log(arg.length); // Now we know it has a .length property, so no more error
return arg;
}
现在这个泛型函数被定义了约束,因此它不再是适用于任意类型:
loggingIdentity(3); // Error, number doesn't have a .length property
我们需要传入符合约束类型的值,必须包含必须的属性:
loggingIdentity({length: 10, value: 3});
参考文档:https://zhongsp.gitbooks.io/typescript-handbook/content/doc/handbook/Generics.html