我想从现有的类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'不是构造函数类型。
我可以安全地忽略此错误并在生产中使用该代码吗?
答案 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样式的构造函数。