1. ホーム
  2. typescript

[解決済み] クラス定数を実装するには?

2022-03-17 12:59:52

質問

TypeScriptでは const キーワードは、クラスのプロパティを宣言するために使用することはできません。これを行うと、コンパイラは "クラスのメンバは 'const' キーワードを持つことができません." というエラーを発生させます。

あるプロパティが変更されてはいけないことをコードで明確に示す必要があることに気がつきました。 一度宣言したプロパティに新しい値を代入しようとすると、IDEやコンパイラがエラーになるようにしたいのです。皆さんはどのようにこれを実現しますか?

現在、読み取り専用のプロパティを使っていますが、私はTypescript(とJavaScript)の初心者なので、もっと良い方法はないかと考えています。

get MY_CONSTANT():number {return 10};

typescript 1.8を使っています。何か提案はありますか?

追記:typescript 2.0.3を使うようになったので、受け入れました。 Davidの回答

解決方法は?

TypeScript 2.0では readonly 修飾子 :

class MyClass {
    readonly myReadOnlyProperty = 1;

    myMethod() {
        console.log(this.myReadOnlyProperty);
        this.myReadOnlyProperty = 5; // error, readonly
    }
}

new MyClass().myReadOnlyProperty = 5; // error, readonly

コンストラクタでの代入が可能なので、正確には定数ではありませんが、それは大きな問題ではないでしょう。

代替案

別の方法として static キーワードに readonly :

class MyClass {
    static readonly myReadOnlyProperty = 1;

    constructor() {
        MyClass.myReadOnlyProperty = 5; // error, readonly
    }

    myMethod() {
        console.log(MyClass.myReadOnlyProperty);
        MyClass.myReadOnlyProperty = 5; // error, readonly
    }
}

MyClass.myReadOnlyProperty = 5; // error, readonly

これは、コンストラクタで代入できず、一箇所にしか存在しないという利点があります。