TypeScriptで書かれたソースコードを読んでいて、as const
の使い方がわからなかったので調べた
const assertion
はTypeScript 3.4で搭載されたシグネチャ
宣言時にハードコードされた値がLiteral Typesとして適用される
const tuple1 = [false, 1, '2'] as [false, 1, '2'] // const tuple1: [false, 1, '2'] const tuple2 = [false, 1, '2'] as const // const tuple2: readonly[false, 1 '2']
Widening Literal Types の抑止
いままではconst 宣言代入で得られた Literal Types は widening 挙動により、可変の変数に代入すると、Literal Types ではなくなってしまった
しかし、as const
をつけることによってアップキャストされない限り、変数の型が変わらないようになる
const a = 'a' // const a: 'a' let b = a // let b: string const A = 'A' as const // const A: 'A' let B = A // let B: 'A'
めちゃ便利