【发布时间】:2012-11-04 14:44:51
【问题描述】:
我在弄清楚接口中定义构造函数的工作原理时遇到了一些麻烦。我可能完全误解了一些东西。但是我已经搜索了很长一段时间的答案,但找不到与此相关的任何内容。
如何在 TypeScript 类中实现以下接口:
interface MyInterface {
new ( ... ) : MyInterface;
}
Anders Hejlsberg 在video 中创建了一个包含类似内容的界面(大约 14 分钟)。但是对于我的生活,我无法在课堂上实现这一点。
我可能误解了一些东西,我没有得到什么?
编辑:
澄清一下。对于“新(...)”,我的意思是“任何东西”。我的问题是我什至无法获得这个工作的最基本版本:
interface MyInterface {
new () : MyInterface;
}
class test implements MyInterface {
constructor () { }
}
这不是为我编译我在尝试编译时得到“类'test'声明接口'MyInterface'但没有实现它:类型'MyInterface'需要构造签名,但类型'test'缺少一个”。
编辑:
因此,根据反馈对此进行了更多研究。
interface MyInterface {
new () : MyInterface;
}
class test implements MyInterface {
constructor () => test { return this; }
}
TypeScript 无效,这并不能解决问题。你不能定义构造函数的返回类型。它将返回“测试”。以下人员签字: 类测试{ 构造函数 () { } } 似乎是“new () => test”(通过将鼠标悬停在在线编辑器中的“class”上并仅粘贴该代码获得)。这就是我们想要的,也是我认为的。
谁能提供一个实际编译的例子或类似的例子?
编辑(再次...):
所以我可能想出了一个想法,为什么可以在接口中定义它但不能在 TypeScript 类中实现。以下工作:
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
interface MyInterface {
new () : MyInterface;
}
var testFunction = (foo: MyInterface) : void => { }
var bar = new MyClass();
testFunction(bar);
那么,这只是 TypeScript 的一个功能,可以让您与 javascript 交互吗?或者是否可以在 TypeScript 中实现它而无需使用 javascript 实现类?
【问题讨论】:
-
抱歉之前的错误反馈。我还在寻找,老实说,我最好的猜测是 ctor 构造不应该能够返回类型,并且在接口中指定一个类型的能力可能是一个错误。
-
@asawyer 是的,这看起来很奇怪。更奇怪的是,如果 Anders Hejlsberg 会在官方视频中使用一些不可用的东西。
-
我在 codeplex 网站上发布了一个问题。 typescript.codeplex.com/discussions/403413
-
看起来和调用签名一样。与您无法创建实现构造签名的类相同,您也无法创建实现调用签名的类。
标签: typescript constructor interface