【发布时间】:2018-03-07 02:10:32
【问题描述】:
我有一个类似工厂的函数,旨在返回BaseApi 的子类实例。它目前看起来像这样(删除了不相关的部分):
function getApi<T extends BaseApi>(apiClass: typeof BaseApi): T {
return new apiClass();
}
我是这样使用它的:
const someApi = getApi<SomeApi>(SomeApi);
这行得通,但我希望 <SomeApi> 能够通过我传递 SomeApi 构造函数的事实来推断。如果我省略 <SomeApi> 则 someApi 被推断为 @ 类型987654328@,不是SomeApi。更糟糕的是,<T extends BaseApi> 和 typeof BaseApi 之间实际上没有编译器相关性,因为它们是同一件事,因此您可以错误地执行类似 getApi<SecondApi>(FirstApi) 的操作而不会出现编译器错误。
所以我尝试将apiClass 定义为typeof T:
function getApi<T extends BaseApi>(apiClass: typeof T): T {
return new apiClass();
}
我发现TS不理解T的这种用法。有没有办法做到这一点?
【问题讨论】:
标签: typescript