【发布时间】:2020-01-03 21:27:06
【问题描述】:
我正在尝试为MainType 创建工厂。我还想重用已经创建的类型(实际上我需要相同的实例),所以我将它们存储在 ItemFactory 中。
class BaseType {
}
class MainType extends BaseType {
}
class ItemFactory {
items: { [type: string]: BaseType } = {};
get<T extends BaseType>(type: string): T | null {
let item = this.items[type];
if (!item) {
switch (type) {
case "main-type":
item = new MainType();
break;
default:
return null;
}
this.items[type] = item;
}
return item as T;
}
}
有没有办法简化通话
itemFactory.get<MainType>("main-type"); // current call
// option 1
const resolvedType = itemFactory.get<MainType>();
// option 2
const resolvedType = itemFactory.get("main-type");
我想要选项 1 或选项 2(两者都不需要),所以我不必同时传递标识符和类型来正确解析结果类型。
【问题讨论】:
标签: typescript generics types type-conversion factory