[[object型 (TypeScript)|object型]]や[[配列 (JavaScript)|配列]]の値を変更不可にするサフィックス。[[object型 (TypeScript)|object]]に対して[[as const]]を利用した場合、以下のように[[イミュータブル]]になる。ネストした[[プロパティ (TypeScript)|プロパティ]]にも効果がある。 ```ts const obj = { id: 1, name: "one", nested: { flag: true } } as const // Cannot assign to 'id' because it is a read-only property.ts(2540) obj.id = 2 // Cannot assign to 'flag' because it is a read-only property.(2540) obj.nested.flag = false ``` <button class="playground"><a href="https://www.typescriptlang.org/play?#code/MYewdgzgLgBCBGArGBeGBvAUDGBLAJgFwwCMANNjGAIYC2ApsQETj1MU5j3T1EaU4AZgBtqAc2JQATgFd6lAL6YFMahBihIUTJgD0umAGFqYMCFhqIuMWBhQQMAOQFHMePWDUZEenli51ahgpemp8AFpwYQBPGAAHKRA4+ikoaIA6KAgACgAmAFYAFgAGAEpMBER0glQYXL0DY1NzVQgrGzsHRxFxV3dPb19cf0Dg0Iio2ISklLT0vKKyiqR0rh58dJ6xWsFqYR9MIA">Playground</a></button> また、`obj.id`は型`1`として推論される。`obj.id`が[[イミュータブル]]になったためだ。[[as const]]を利用しない場合、`obj.id`は後からでも書き換え可能であるため、`number`と推論される。 ```ts const obj = { id: 1, name: "one" } as const // objはimmutableなので、obj.idは1と推論される obj.id // ^? const obj2 = { id: 1, name: "one" } // obj2はmutableなので、obj2.idはnumberと推論される obj2.id // ^? ``` <button class="playground"><a href="https://www.typescriptlang.org/play?#code/MYewdgzgLgBCBGArGBeGBvAUDGBLAJgFwwCMANNjGAIYC2ApsQETj1OYC+M1EMokUTJgD0wuEkD2DLlq0ArlGrwANvUBWDIDsGQOYMgQAYEiAHQEJJQBYMgCuNAa1GBVBkAxDIGiGTHsP4RYnAD0A-EP7RxiACZUDEoCYnJKGgZmVnYOIVF-AIk5BWU1LV0kAOcJMFlaeHoAJ3Nre0ds51ccGC8gA">Playground</a></button> ## [[as const]]で[[Enum (TypeScript)|Enum]]の等価表現 ```ts const enum Direction { Up, Down, } ``` は ```ts const Direction = { Up: 0, Down: 1, } as const; ``` と書ける。 ## MOC - 📒**関連** - [[なぜsatisfies演算子を使うのか?]] - 📜**アクティビティ** - 📝**トラブルシューティング**