TypeScript:扩展现有的JavaScript对象

时间:2016-08-26 07:46:17

标签: javascript typescript

我有一个纯JavaScript对象(我们称之为O)来自某个库,其接口位于环境名称空间中,例如:

declare namespace N {
    interface IO {
        // properties...
    }
}

我需要创建一个TypeScript类,它将扩展此JavaScript对象。扩展它的机制是由库提供的,所以我不能使用本机TS继承,但是我需要访问这个JS对象的所有属性,我正在扩展它。我尝试声明一个实现此接口并扩展它的类:

declare class DummyO implements N.IO {
    // copy-paste everything from N.IO
}

class MyRealClass extends DummyO {
}

现在我可以访问所有属性,但也有两个问题:

  1. 我不得不复制粘贴整个界面,这不太实用。
  2. TypeScript不会为DummyO创建任何定义(这很好),但同时尝试使用其本机机制来扩展它(这很糟糕,因为DummyO实际上并不存在)。
  3. 所以问题是 - 如何解决它?如何创建一个TS类,它有效地扩展了这个本机对象?或许还有另一种方法可以说服TS我真的继承O而没有那么麻烦?

1 个答案:

答案 0 :(得分:-1)

我所知道的唯一可行的解​​决方案是将接口复制粘贴到类中:

declare namespace N {
    interface IO {
        // example properties:
        a: number;
        f(): number;
    }
}


class MyRealClass implements N.IO {
    // copy IO
    a: number;
    f: () => number;

    // add "real" members later...
}

它不是很漂亮,但这是你在图书馆中使用自定义继承解决方案所获得的。