【发布时间】:2022-01-07 09:39:30
【问题描述】:
我有一个 Inner<T> 接口,它包装了一个泛型类型的值:
interface Inner<T> {
v: T;
}
该接口有不同的实现:
class SomeInner<T> implements Inner<T> {
constructor(public v: T) {}
some = true;
}
class SomeOtherInner<T> implements Inner<T> {
constructor(public v: T) {}
someOther = true;
}
有一个Outer 类包装了Inner<T> 的一个实例。我也想不时访问Inner。因此我保留了 Inner 的实际类型:
class Outer<T, TInner extends Inner<T>> {
constructor(public inner: TInner) { }
getV(): T {
return this.inner.v;
}
}
不幸的是,TS 无法推断出 Outer 中 T 的类型 - 尽管它知道 TInner 的类型及其泛型:
const someInnerInst = new SomeInner("foo" as string);
const outerInstOfSomeInner = new Outer(someInnerInst);
const vFromOuter = outerInstOfSomeInner.getV(); // Type: unknown // <- SHOULD BE string
const vFromInner = outerInstOfSomeInner.inner.v; // Type: string
有没有办法帮助 TypeScript 在 Outer 中推断 T?
【问题讨论】:
标签: typescript oop generics