5

まだ存在しないライブラリの宣言ファイルを作成していますが、そこには読み取り専用属性を持つクラスがいくつかあります。それを宣言に入れるにはどうすればよいですか?

4

2 に答える 2

5

奇妙なことに、インターフェイスまたはアンビエント宣言でゲッターとセッターを指定することはできません。

あなたが得ることができる最も近いものは次のとおりです。

interface Test {
    Prop: number;
}

class Example implements Test {
    private prop: number;

    get Prop() :number {
        return this.prop;
    }
}

残念ながら、これは実装がセッターを許可することを妨げるものではなく、アンビエント宣言のコンテキストでは、呼び出し元が値を設定しようとすることを妨げるものではありません。

于 2013-02-10T11:40:29.127 に答える
2

TypeScript 2.0 では、読み取り専用プロパティを宣言できるようになりました。たとえば、

interface Point {
    readonly x: number;
    readonly y: number;
}

var p1: Point = { x: 10, y: 20 };
p1.x = 5;                            // Error, p1.x is read-only

var p2 = { x: 1, y: 1 };
var p3: Point = p2;                  // Ok, read-only alias for p2
p3.x = 5;                            // Error, p3.x is read-only
p2.x = 5;                            // Ok, but also changes p3.x because of aliasing

詳しくはこちらをご覧ください。

于 2016-08-10T16:58:23.493 に答える