yaq*_*awa 2 typescript typescript-generics
我读过这篇文章https://www.typescriptlang.org/docs/handbook/generics.html#generic-constraints
我想知道为什么我们必须extends在这里使用关键字?
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;
}
Run Code Online (Sandbox Code Playgroud)
为什么不这样做呢?当我使用关键字时有什么区别extends?
interface Lengthwise {
length: number;
}
function loggingIdentity(arg: Lengthwise): Lengthwise {
console.log(arg.length); // Now we know it has a .length property, so no more error
return arg;
}
Run Code Online (Sandbox Code Playgroud)
这并不像你总是必须这样做。大多数时候,它恰好是你想要的。
\n当你这样做时:
\nfunction loggingIdentity<T extends Lengthwise>(arg: T): T {\nRun Code Online (Sandbox Code Playgroud)\nthen将返回与其接受的loggingIdentity完全相同的子类型。T这是比说更强有力的承诺:
function loggingIdentity(arg: Lengthwise): Lengthwise {\nRun Code Online (Sandbox Code Playgroud)\n它只承诺返回 a Lengthwise,它不必与接受的参数匹配。
让我来说明一下这一点。
\ninterface Lengthwise {\n length: number;\n}\n\ndeclare function generic<T extends Lengthwise>(arg: T): T;\ndeclare function concrete(arg: Lengthwise): Lengthwise;\n\nconst myArgument = { length: 1, foo: 'bar '};\n\nconst first = generic(myArgument).foo; // string\nconst second = concrete(myArgument).foo; // Compile-time error \xe2\x80\x94 the knowledge of `foo` was lost\nRun Code Online (Sandbox Code Playgroud)\n如您所见,second没有任何属性调用foo它。concrete只承诺返回 a ,而不是提供给它的Lengthwise确切子类型。Lengthwise
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |