[解決済み] クラス定数を実装するには?
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
これは、コンストラクタで代入できず、一箇所にしか存在しないという利点があります。
関連
-
[解決済み】tsconfigファイルにおけるesModuleInteropの理解
-
[解決済み] TypeScriptの円形型参照
-
[解決済み] TypeScriptでfetchを使う方法
-
[解決済み] TypeScriptの非同期関数でプロミスを返す
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] TypeScriptのオブジェクトリテラルでの型定義
-
[解決済み】TypeScriptのコンパイルでExperimental decoratorsの警告が出る。
-
[解決済み】WebStorm/PhpStormのダブルクォートでTypeScriptの自動インポートを行う。
-
[解決済み】tsconfig.jsonファイルを生成するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jest で typescript を使用して identity-obj-proxy を使用すると未定義が返される
-
[解決済み] Apollo Serverでコンテキストオブジェクトを正しく入力するにはどうすればよいですか?
-
[解決済み] TSLintの "文字列リテラルによるオブジェクトアクセス "を回避するためのコードの書き換え方法
-
[解決済み] TypeScriptの "*.d.ts "について
-
[解決済み] ES6クラスで静的定数を宣言する?
-
[解決済み】TypeScriptの "not assignable to parameter of type never "エラーとは?
-
[解決済み】TypeScriptの関数のオーバーローディング
-
[解決済み】タイプからプロパティを除外する
-
[解決済み】TypescriptのArray<Type> VS Type[]について
-
[解決済み】TypeScriptのpublic static const