【发布时间】:2020-12-12 04:16:59
【问题描述】:
在以下示例中,我创建了一个具有 TState 和 TResult 的 concreate 类 Dialog。问题是,当我将它传递给show() 方法时,即使TResult 与传入的组件类型的TResult 匹配,结果也是Unknown 而不是Boolean | undefined。
interface DialogBase<TState, _TResult> {
dialogState: TState;
}
class Test {
public show<TResult, TState>(
component: { new(...args: any[]): DialogBase<TState, TResult> },
state: TState): TResult | undefined {
return;
}
}
class State {}
class Dialog implements DialogBase<State, Boolean> {
dialogState: State = new State();
}
const test = new Test();
test.show(Dialog, new State()); // return type Unknown
我缺少什么让 typescript 将 show 方法的返回类型断言为 DialogBase 的类型化 TResult?
我什至可以将组件的类型移动到泛型中,但它仍然无法识别返回类型:
interface DialogBase<TState, _TResult> {
dialogState: TState;
}
class Test {
public show<TResult, TState, TDialog extends DialogBase<TState, TResult>>(
component: { new(...args: any[]): TDialog },
state: TState): TResult | undefined {
return;
}
}
class State {}
class Dialog implements DialogBase<State, Boolean> {
dialogState: State = new State();
}
const test = new Test();
test.show(Dialog, new State()); // return type Unknown
【问题讨论】:
-
似乎没有一个具体的属性来接受这个值,你不能这样做。
-
如果您没有为 TS 编译器提供任何提示,TS 无法确定您的返回类型
-
@captain-yossarian
TResult的方法与 DialogBase 的TResult相同。如果我传入一个 DialogBase,为什么它不能识别 TResult 是一个布尔值?
标签: typescript