【发布时间】:2019-01-19 10:35:05
【问题描述】:
我目前正在用 TypeScript 编写一个类工厂,并希望返回一个类型作为函数的输出。尽管 TypeScript 将类型作为输入处理——即泛型——很好,我还没有找到将类型作为输出处理的方法。
This StackOverflow question on class factories 提供了一个特别有用的解决方案,但没有完全回答我的问题。鉴于以下结构,
function factory(someVar: any) {
return class A {
// Do something with someVar that makes this class unique
}
}
问题表明应该对这个工厂函数的输出执行以下操作:
import factory from "someLocation";
const AClass = factory({foo: "bar"});
type A = InstanceType<typeof AClass>;
interface IData {
someField: A;
}
我有兴趣将此功能包含在我的工厂函数中,以使系统更具可重用性或模块化。但是,正如最初所说,我不确定如何从函数返回类型。如果我尝试以下操作,TypeScript 会抛出错误,[ts] 'MenuState' only refers to a type, but is being used as a value here. [2693]:
function factory(someVar: any) {
class AClass {
// Do something with someVar that makes this class unique
}
type A = InstanceType<typeof AClass>;
return A;
}
我该怎么办?一般来说,是否有任何语义上正确的方法来处理类型作为值或变量?如果不是,为什么这违反了 TypeScript 的最佳实践?此外,如果可能的话,如何将这种类型用作构造函数?
【问题讨论】:
标签: javascript typescript object types factory