【发布时间】:2016-04-08 00:58:18
【问题描述】:
在 TypeScript 中,我通常使用以下方式定义类类型的类型:
declare type Type = {
new (...args: any[]): any
}
例如,可以在将类作为参数传递时使用它。这有点类似于 C# 中的 Type,但也可以使用 new 运算符直接实例化。 AFAIK,这种类型定义实际上类似于:
一个构造函数,可以接收任意数量和类型的参数,并且可以返回任何值。
如果期望参数、属性或其他变量包含对类的引用(更准确地说,是对它的构造函数),Type 类型总是在手边,对我来说非常有用。
但是,有时我会遇到以下情况:我没有对类(构造函数)本身的引用,只有它的原型。但是,仍然可以通过
获得对类本身的引用obj.constructor
但是,它的类型是 Function,并且不能作为类实例化:
new obj.constructor(); // Error: Cannot use 'new' ...
这会产生错误:
不能将“new”与类型缺少调用或构造签名的表达式一起使用。
如果我使用类型断言,编译器会接受 new 运算符,并且编译后的代码在运行时会按预期运行。
我是否遗漏了什么来解释为什么 obj.constructor 不是现成的新产品?
【问题讨论】:
-
你能给出一个完整的代码示例吗?我试图重现你所拥有的,很明显为什么你不能从生成的 js 中调用 new obj.constructor()。 a 对象上没有 constructor 属性。 typescriptlang.org/…
标签: types constructor typescript