🧪
TypeScriptのconst assertionをちゃんと理解したい
const assertionって?
const assertionを利用することのメリットは2つあります。
-
readonly
にできる - Literal TypesがWideningされない
実際のコードを見ながら理解していきましょう。
書き方
const user = {
name: 'Haruki',
age: 99
} as const
オブジェクトの末尾にas const
付け加えるだけ。
readonly
なので、オブジェクトの値の変更はできません。
userInfo.name = 'Harry'
// Cannot assign to 'name' because it is a read-only property.
この『readonly
なので、オブジェクトの値の変更はできません。』という部分が非常に重要です。
これにより、 オブジェクトの値が変更できない = オブジェクトの値の型が変更できない ということになるので、Literal TypesのWideningが行われません。もう型推論によって勝手にstring型やnumber型などになりません。
ちなみに配列でも同様です。
const userGroup = ['Haruki', 'Harry', 'Lily', 'Baker'] as const
readonly
なので値の変更はできません。
userGroup[0] = 'Tom'
// Cannot assign to '0' because it is a read-only property.
readonly
との違いは?
TypeScriptには以下のようなreadonly
の書き方があります。
type userInfo = {
readonly name: string;
readonly age: number;
};
const assetion
とどう違うのかというと、readonly
はプロパティごとに宣言できるのに対し、const assetion
はオブジェクト全体に宣言します。
Discussion