假设您要为其创建打字的现有Javascript框架。 Javascript代码使用Node.js模块,原型继承和mixins:
// File: src/lib/a.js
function A() {
this.isA = true;
this.type = 'a';
}
module.exports = A;
// File: src/lib/b.js
var A = require('./a');
var plugin = require('./plugin');
function B() {
A.call(this);
this.isB = true;
this.type = 'b';
plugin(this);
}
B.prototype = object.create(A.prototype);
B.prototype.constructor = B;
module.exports = B;
// File: src/lib/plugin.js
function plugin(obj) {
obj.doSomethingFancy = function() {
// ...
}
}
module.exports = plugin;
您如何在声明文件中描述B
,以便传达某些成员是由/通过其构造函数创建的?
答案 0 :(得分:0)
你真的需要这种区别吗?你的构造函数总是创建那些成员,所以如果你有一个B
类型的对象 - 你可以确定那些属性就在那里。
如果您想发信号通知,某个成员可能不存在 - 请使用?
为其添加名称,就像我在下面的示例中为doSomethinFancy
所做的那样。
class A {
public isA: boolean;
public type: string;
constructor() {
this.isA = true;
this.type = 'a';
}
}
function plugin(obj: any): any {
obj.doSomethingFancy = function() {
// ...
}
}
class B extends A {
public isB: boolean;
// same could be used for optional function arguments
public doSomethingFancy?: () => {};
constructor() {
super();
this.isB = true;
this.type = 'b';
plugin(this);
}
}