当前位置: 首页 > 知识库问答 >
问题:

具有构造签名的接口是如何工作的?

孟高峰
2023-03-14

我遇到了一些麻烦,弄清楚如何在接口中定义构造函数。我可能完全误会了什么。但我已经寻找答案很久了,我找不到任何与此相关的东西。

如何在TypeScript类中实现以下接口:

interface MyInterface {
    new ( ... ) : MyInterface;
}

Anders Hejlsberg创建了一个界面,其中包含类似于这段视频中的内容(大约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类中实现它。以下工作:

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实现类?

共有1个答案

曾明诚
2023-03-14

接口中的构造签名不能在类中实现;它们仅用于定义现有的JSAPI,这些API定义了一个可“新建”的函数。下面是一个涉及接口new签名的示例:

interface ComesFromString {
    name: string;
}

interface StringConstructable {
    new(n: string): ComesFromString;
}

class MadeFromString implements ComesFromString {
    constructor (public name: string) {
        console.log('ctor invoked');
    }
}

function makeObj(n: StringConstructable) {
    return new n('hello!');
}

console.log(makeObj(MadeFromString).name);

这为您可以调用makeobj的内容创建了一个实际约束:

class Other implements ComesFromString {
    constructor (public name: string, count: number) {
    }
}

makeObj(Other); // Error! Other's constructor doesn't match StringConstructable
 类似资料:
  • 提供的参数与调用目标的任何签名都不匹配:类型'new()=>foo'和'Bar'的构造签名不兼容:类型'Bar'需要构造签名,但类型'foo'缺少一个(c:Bar)=>Bar Foo的构造函数类型是()=>Foo,我认为Bar就是这么说的。我是不是漏掉了什么?

  • 问题内容: 据我所知,我们无法实例化接口,那么这是怎么发生的呢? 问题答案: 您无法实例化接口,但是可以为实现该接口的类的对象提供接口的引用,因此在代码中,您正在实现接口并创建该类的对象并提供该类的引用。

  • 我注意到在Dart中可以创建一个const构造函数。在文档中,它说< code>const一词用于表示编译时常数。 我想知道当我使用构造函数创建对象时会发生什么。这是否像一个不可变对象,它总是相同的并且在编译时可用?构造函数的概念实际上是如何工作的?const构造函数与常规构造函数有何不同?

  • 有人在Itext 7中玩过PdfSignatureFormField的签名外观吗?如果是的话,你能给我一点解释和/或一个小例子吗 提前感谢 大卫L。

  • 这是我第一次尝试将更复杂的对象存储到数据库中。我需要一些关于数据库设计的帮助。 要存储并从数据库中重新生成的recipe对象 最复杂的部分是对象。每个食谱可以有不同数量的步骤和不同的配料分配给每一个步骤。 我做了另一个设计,其中与以及与相结合。我认为第一种布局更容易查询,因为我只需查看就可以通过进行搜索,但我不确定。有什么想法吗?

  • 使用Java8泛型,可以使用构造函数引用初始化该变量,如下所示: Java编译器如何将其转换为字节码? 我知道对于其他类型,比如,它可以使用一个指令,该指令指向字符串构造函数,这只是一个具有特殊含义的方法。