UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【TypeScript】as const ( const assertion )

TypeScriptで書かれたソースコードを読んでいて、as constの使い方がわからなかったので調べた

qiita.com

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'

めちゃ便利