TypeScript类扩展了JavaScript函数

时间:2019-05-27 15:58:26

标签: typescript

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

function MyFunctionClass() { }

MyFunctionClass.prototype.myMethod = function(str) {
  console.log(str);
};

我写了这段简单的代码

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

let t = new Test();
t.myMethod('Test');

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

  

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

  

令人惊讶的是它确实有效...

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