javascript – Typescript声明文件包含没有成员实现的类定义

当我查看Backbone声明文件时,我看到:

export class Router extends Events {
    ...
    constructor (options?: RouterOptions);
    initialize (options?: RouterOptions);
    ...
}

以及其他类没有实现的方法定义的地方.我认为这种语法是为接口保留的.编译器允许它传入声明文件,但不传入我自己的ts文件.

.d.ts与.ts扩展的编译规则之间是否存在差异?如果是这样,这些类的类应该如何以不同的方式使用?

最佳答案
.d.ts文件用于描述某些类的现有JavaScript或TypeScript实现.

.d.ts中的一个类(我将它称为“声明类”,因为它们是等价的)与虚拟类或接口完全不同.当你声明一个声明类时,你会说“还有一些其他类会出现这种形状”.当您扩展该类时,编译器将假定在运行时存在一个类(或类似于类似的东西)并且该名称在原型链中用作下一个指针时发出代码.

举个例子,这个代码(单独)不起作用 – 你会得到一个运行时错误,因为Foo没有在任何地方定义:

declare class Foo {  public bar(): void; }
class FooDerived extends Foo { }

另一方面,这段代码很好:

interface Foo { bar(): void; }
class FooImpl implements Foo { public bar() {} }

转载注明原文:javascript – Typescript声明文件包含没有成员实现的类定义 - 代码日志