混合

    下面的例子展示了TypeScript中的混合:

    理解例子

    1. // Disposable Mixin
    2. class Disposable {
    3. isDisposed: boolean;
    4. dispose() {
    5. this.isDisposed = true;
    6. }
    7. }
    8. isActive: boolean;
    9. activate() {
    10. this.isActive = true;
    11. }
    12. deactivate() {
    13. this.isActive = false;
    14. }
    15. }

    然后,我们将这个类混合入了一个新类,让我们仔细看看它的语法:

    为了不重新提供实现细节,我们创建了同名属性,并且提供了同样的类型。这会告诉编译器这些成员在运行时将会可用,这将让我们不用机械地重新抄写一遍同样的代码:

    1. isDisposed: boolean = false;
    2. // Activatable
    3. isActive: boolean = false;
    4. activate: () => void;
    5. deactivate: () => void;

    applyMixins是我们创建的一个辅助函数。这将会遍历我们被混合的类的原型,将其的具体实现赋值给最终类:

    1. function applyMixins(derivedCtor: any, baseCtors: any[]) {
    2. baseCtors.forEach(baseCtor => {
    3. Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
    4. derivedCtor.prototype[name] = baseCtor.prototype[name];
    5. })
    6. }