TypeScript中是否有“密封的”或“最终的”?

问题描述 投票:25回答:3

我正在尝试在超类中实现一个方法,该方法应该可以在子类中使用,但不能更改。考虑一下:

export abstract class BaseClass {
    universalBehavior(): void {
        doStuff(); // Do some universal stuff the same way in all sub classes
        specializedBehavior(); // Delegate specialized stuff to sub classes
    }

    protected abstract specializedBehavior(): void;
}

我的意图是,BaseClass的任何子类不仅可以自由地省略universalBehavior()的实现,而且甚至不被允许提供实现。 TypeScript还不可能吗?当我在子类中省略实现时,Intellisense会抱怨。我似乎可以做的最好的事情是:

export class SubClass extends BaseClass {
    universalBehavior(): void {
        super.universalBehavior();
    }

    specializedBehavior(): void {
        // sub class' implementation
    }
}

显然,这是有问题的,因为我必须确保没有子类可以实现除调用universalBehavior()之外的任何方法来实现super.universalBehavior()。>

我正在尝试在超类中实现一个方法,该方法应该可以在子类中使用,但不能更改。考虑一下:导出抽象类BaseClass {UniversalBehavior():void ...

inheritance typescript final typescript2.0 sealed
3个回答
18
投票

不,在撰写本文时还没有。对于这种关键字,有一个建议正在考虑中,但是可能会实施,也可能永远不会实施。


8
投票

“密封方法”的实现黑客实例,作为类型函数的只读属性,在扩展类中尝试覆盖时会引发编译器错误:


0
投票
// I use this workaround:

export default class CreateHandler extends BaseHandler {
    // final prop used as method
    public readonly create = (blueprint: Blueprint): Response<Record> => {
        return blueprint.create();
    };

    // normal method
    public store(blueprint: Blueprint): Response<Record> {
        return this.response(blueprint.create());
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.