这是示例代码:
class Base {}
function fn<T extends typeof Base>(
Cls: T,
prop: keyof InstanceType<T>,
) {
return (new Cls())[prop];
}
TS游乐场:https://www.typescriptlang.org/play?#code/MYGwhgzhAEBCkFNoG8C+AodAzArgO2ABcBLAez2izwB4AVaBAD0ITwBMZCBPABwVKxxEAPgAU6aJOgBhEBABc0WgBoJUngCdSPRQGsEXAdACSeCITAEEtXgjrDVAShRrJGhIRwaKovAgDuMnKijo4 A2praALoA3OgYQA
prop
应该是一个属性Cls
,但是这段代码不起作用?
如果我改变它就会起作用keyof InstanceType<T>
to keyof Base
,但我希望该函数可以与任何子类一起使用Base
.
似乎 TypeScript 编译器在以下情况下反应很糟糕InstanceType
用于泛型。
如果将泛型参数更改为实例类型,它就会起作用,这应该与原始代码等效:
function fn<T extends Base>(
Cls: new () => T,
prop: keyof T
) {
return new Cls()[prop];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)