TypeScript类扩展了JavaScript函数

TypeScript类扩展了JavaScript函数,typescript,Typescript,我想创建一个新类,该类从现有类(如JavaScript函数)扩展而来 我写了这段简单的代码 class Test extends MyFunctionClass { constructor() { super(); } } let t = new Test(); t.myMethod('Test'); 令人惊讶的是,它确实可以工作,因为它打印测试,并且不会引发运行时错误。 然而,打字稿告诉我 类型“=>void”不是构造函数类型 我可以安全地忽略此错误并在生产

我想创建一个新类,该类从现有类(如JavaScript函数)扩展而来

我写了这段简单的代码

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

let t = new Test();
t.myMethod('Test');
令人惊讶的是,它确实可以工作,因为它打印测试,并且不会引发运行时错误。 然而,打字稿告诉我

类型“=>void”不是构造函数类型


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

要做到这一点,您需要创建一个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的类构造将编译为JavaScript构造函数和相关原型,该TypeScript可以与JavaScript MyFunctionClass建立继承关系。如果您的目标是ES2015+,TypeScript的类将编译为ES2015+类,并且ES2015+类可以在extends子句中使用ES5样式的构造函数。

为此,您需要创建一个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的类构造将编译为JavaScript构造函数和相关原型,该TypeScript可以与JavaScript MyFunctionClass建立继承关系。如果您的目标是ES2015+,TypeScript的类将编译为ES2015+类,并且ES2015+类可以在extends子句中使用ES5样式的构造函数。

您可以这样做,但创建一个javascript文件来存储该函数,并创建一个声明文件来声明该函数为类,那么TypeScript将不会抛出错误。您可以这样做,但是创建一个javascript文件来存储该函数,并创建一个声明文件来声明该函数为类,那么typescript不会抛出错误