TypeScript中受保护的等价物是什么?

时间:2013-03-07 15:55:29

标签: typescript

TypeScript 受保护的等效内容是什么?

我需要在基类中添加一些成员变量,仅用于派生类

3 个答案:

答案 0 :(得分:49)

更新

2014年11月12日.TypeScript版本1.3可用,并包含受保护的关键字。

2014年9月26日。protected关键字已落地。它目前正在发布。如果您使用的是新版本的TypeScript,现在可以使用protected关键字...以下答案适用于旧版本的TypeScript。享受。

View the release notes for the protected keyword

class A {
    protected x: string = 'a';
}

class B extends A {
    method() {
        return this.x;
    }
}

旧答案

TypeScript只有private - 没有受到保护,这只在编译时检查时表示私有。

如果您想访问super.property,则必须公开。

class A {
    // Setting this to private will cause class B to have a compile error
    public x: string = 'a';
}

class B extends A {
    method() {
        return super.x;
    }
}

答案 1 :(得分:4)

以下方法如何:

interface MyType {
    doit(): number;
}

class A implements MyType {
    public num: number;

    doit() {
        return this.num; 
    }
}

class B extends A {
    constructor(private times: number) {
        super();
    }

    doit() {
        return super.num * this.times; 
    }
}

由于num变量被定义为public,因此可以使用:

var b = new B(4);
b.num;

但是因为它没有在界面中定义,所以:

var b: MyType = new B(4);
b.num;

将导致The property 'num' does not exist on value of type 'MyType' 您可以在此playground中尝试。

您也可以在仅导出接口时将其包装在模块中,然后从其他导出的方法中返回实例(工厂),这样变量的公共范围将“包含”在模块中。 />

module MyModule {
    export interface MyType {
        doit(): number;
    }

    class A implements MyType {
        public num: number;

        doit() {
            return this.num; 
        }
    }

    class B extends A {
        constructor(private times: number) {
            super();
        }

        doit() {
            return super.num * this.times; 
        }
    }

    export function factory(value?: number): MyType {
        return value != null ? new B(value) : new A();
    }
}

var b: MyModule.MyType = MyModule.factory(4);
b.num; /// The property 'num' does not exist on value of type 'MyType'

playground中的修改版本。

我知道这不完全是你所要求的,但它非常接近。

答案 2 :(得分:1)

至少目前(版本0.9)受保护的内容未在规范中提及

http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf