【发布时间】:2017-02-05 10:49:59
【问题描述】:
我正在使用一个外部库,它在回调中返回类型为A 的实例化对象a,其中A 被定义为接口(@ 的类实现987654324@没有被外部模块导出):
extLib.on("someEvent", ((a: A) => { /*...*/ });
现在我想将B 类型的mixin 对象添加到A 的现有实例中:
class B {
someExtension() { /* ... */ }
}
我目前的做法有点糟糕:
function Add_B(a: A): (A & B) {
// cast to intersection type
let _a = a as (A & B);
_a.someExtension = () => { /* ... */ }
return _a;
}
extLib.on("someEvent", ((a: A) => {
let _a = Add_B(a);
// mixin achieved, _a is of type (A & B)
});
现在有人知道更好的方法吗:
- 允许
B拥有可调用的构造函数,并让B成为可更新的 - 产生更少/更简洁的代码
- 比
A & B交集类型更具表现力 - 是否允许
readonly属性在B上? - 不会过多地混淆原型链(想想
static成员) ?
【问题讨论】:
标签: javascript object typescript interface mixins