我有一个通用类Generic<T>
和另一个通用类,其中另一个通用类是GenericWrap<U extends Generic<any>
作为通用类型。它有一个Generic<any>
作为成员。 (请参见下面的代码)
现在NumberGenericWrap
用通用类型GenericWrap
扩展了<NumberGeneric>
。此时,我希望NumerGenericWrap.generic
的类型为Generic<number>
,因此NumberGenericWrap.getValue()
的返回类型可以为number
。但最终以any
类型结束。
打字稿支持吗?
class Generic<T> {
val: T;
}
class NumberGeneric extends Generic<number> {
}
class GenericWrap<U extends Generic<any>> {
generic: U;
getValue() {
return this.generic.val;
}
}
class NumberGenericWrap extends GenericWrap<NumberGeneric> {
}
let n = new NumberGenericWrap();
// expected 'typeof val' => number
// actual 'typeof val' => any
let val = n.getValue();
答案 0 :(得分:1)
我不知道为什么类型检查器不尝试推断val类型,但是它有解决方法。只需告诉类型检查器对该通用类型进行查找并找到val类型即可。
type ValType<T extends Generic<any>> = T["val"];
class GenericWrap<U extends Generic<any>> {
generic: U;
getValue(): ValType<U> {
return this.generic.val;
}
}