TypeScript类扩展了JavaScript函数

Lpp*_*Edd 1 typescript

我想class从现有的类式JavaScript 创建一个新的扩展function

function MyFunctionClass() { }

MyFunctionClass.prototype.myMethod = function(str) {
  console.log(str);
};
Run Code Online (Sandbox Code Playgroud)

我写了这段简单的代码

class Test extends MyFunctionClass {
    constructor() {
        super();
    }
}

let t = new Test();
t.myMethod('Test');
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,它确实有效,因为它可以打印Test并且不会引发运行时错误。
但是,TypeScript游乐场告诉我

类型'()=> void'不是构造函数类型。

我可以安全地忽略此错误并在生产中使用该代码吗?

T.J*_*der 5

为此,您将创建一个TypeScript声明文件(mumble.d.ts)为TypeScript提供有关该类的信息,例如:

// In a .d.ts file associated with the project
declare class MyFunctionClass {
  myMethod(str: string): void;
}
Run Code Online (Sandbox Code Playgroud)

这样,TypeScript不仅知道它MyFunctionClass是一个类,而且还知道它myMethod期望一个字符串并且没有返回值。

令人惊讶的是它确实起作用了...

这并不奇怪。:-)请记住,TypeScript可以编译为JavaScript。如果您以ES5为目标,则TypeScript的class构造将编译为JavaScript构造函数和关联的原型,该TypeScript可以与JavaScript建立继承关系MyFunctionClass。如果您以ES2015 +为目标,则TypeScript的class编译为ES2015 + class,并且ES2015 + class可以在extends子句中使用ES5样式的构造函数。