TypeScriptのconstはミュータブルなのでinterfaceでイミュータブルにする
TypeScriptのconstは再代入ができないだけであって、オブジェクトをconstにしても、そのプロパティまではイミュータブルにはなりません。
1 2 3 4 |
const obj:{x:number,y:number} = { x: 10, y: 20 }; obj.x = 12; obj.y = 15; // obj = {}; // 再代入はコンパイルエラー |
インターフェースを使って各プロパティをreadonlyにすることでプロパティもイミュータブルにすることができます。
1 2 3 4 |
interface AAA { readonly x:number, readonly y:number } |
これでxもyもreadonlyなので以下のように書き換えます。
1 2 3 4 |
const obj:AAA = { x: 10, y: 20 }; obj.x = 12; // readonlyなのでエラー obj.y = 15; // readonlyなのでエラー // obj = {}; // 再代入はコンパイルエラー |
これでイミュータブルにすることができます。
というか、インタフェース定義するのも面倒なら以下のように記述すればイミュータブルになります。
1 |
const obj:{readonly x:number,readonly y:number} = { x: 10, y: 20 }; |
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^