我在确定接口中定义构造函数的工作方式时遇到了一些麻烦。我可能完全误会了一些东西。但是我已经搜索了很长时间了,但找不到任何与此相关的内容。
如何在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”(通过将在线代码悬停在“类”上,只需粘贴该代码即可获得)。这就是我们想要的,也是我的期望。
任何人都可以在实际编译时提供此示例或类似示例吗?
再次编辑(...):
所以我可能想出了为什么可以在接口中定义它却不能在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实现类?
我在确定接口中定义构造函数的工作方式时遇到了一些麻烦。我可能完全误会了一些东西。但是我已经搜索了很长时间了,但是找不到...
接口中的构造签名不能在类中实现;它们仅用于定义现有的JS API,这些API定义了可启用“新”功能。这是一个涉及有效的接口new
签名的示例:
在搜索完全相同的问题时,我去寻找TypeScript团队是如何做到的...
具有构造签名的接口并不意味着任何类都可以实现(乍一看,对于像我这样具有C#/ Java背景的人来说,这看起来很奇怪,但是给了机会)。稍有不同。
从设计的角度来看,通常在接口中指定构造函数的要求。该界面应描述您可以在对象上执行的操作。如果需要,实现接口的不同类应允许要求不同的构造函数参数。
为了达到预期的行为,您可以使用Interfaces with construct signatures not type checking,即使这可能不是它们应被使用的。