2017-01-22 3 views
2

WebSocketを使用するアプリケーションでは、クローズイベントで数値コードからメッセージを取得できるように、ソケットクローズコードを文字列にマップする必要があります。ソケットの近くにTypeScript:数値でインデックスされた読み取り専用オブジェクトを作成する方法

export const CloseCodes: { [index: number]: string } = { 
    1000: "Normal closure", 
    1001: "The endpoint is going away", 
    1002: "The endpoint is terminating" 
    // etc. 
} 

、私は私が欲しいものである、CloseCodes[event.code]を経由して文字列にevent.codeをマッピングしますが、私ができます。現時点では私はそうのように、「定数」モジュールからオブジェクトをエクスポートしていますまた、CloseCodes[event.code] = "garbage",CloseCodes[1234]="hello"およびdelete(CloseCodes[event.code])を行うことができ、これらはすべて望ましくない。このタイプの使用のための読み取り専用の数値索引構造を作成する方法はありますか?私はこれを行うTypeScriptの方法ではなく、ES6 Object.defineProperty(...)方法を探しています。

答えて

1

はい、単にreadonly index signatureでそれを宣言します。

export const CloseCodes: { readonly [index: number]: string } = { 
    1000: "Normal closure", 
    1001: "The endpoint is going away", 
    1002: "The endpoint is terminating" 
    // etc. 
} 

// Both "Index signature in type '{ readonly [index: number]: string; }' only permits reading." errors: 
CloseCodes[1000] = "bad"; // error! 
delete CloseCodes[1000]; // error! 

私は上記のような方法でreadonlyを使用して信じては活字体2.0で導入されましたので、あなたは、少なくとも活字体のそのバージョンを使用している必要があります。また、削除オペレータwas a very recent TypeScript changeを許可しないので、プロジェクトでこの動作がまだ表示されない場合があります。

+0

ありがとう、これは動作します。私は 'WsCloseCodes [1000];を削除してもエラーにはなりませんが、なぜTypeScript 2.1.4を実行しているのか分かりません。いずれにせよ、これは私が探していたものです。 – 4EverLive

関連する問題