我想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'不是构造函数类型。
我可以安全地忽略此错误并在生产中使用该代码吗?
为此,您将创建一个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样式的构造函数。
| 归档时间: |
|
| 查看次数: |
38 次 |
| 最近记录: |