TypeScript: const n=1とconst n:1=1は何が違うのか、なぜ違うのか
BRANK

TypeScriptにおいて、それぞれ以下のように書いたときの違いと、その理由を説明できますか。両者の違いエディタでホバーするといずれも 1 という型が表示され、一見同じことをしているように思えるかもしれません。しかし、これらは明確に違う型を持ちます。その前に、すべての変数は、その変数の型とは別に、Type Narrowingという仕組みによって一時的に別の型として取り扱う機能があります。それぞれ、仮に global type と narrowed type と呼ぶことにします。すると、const n: 1 = 1 は (global type, narrowed type) = (1, 1) ですが、const n = 1 は (global type, narrowed type) = (number, 1) です。これは以下のようなコードで確認ができます。const n: 1 = 1; const getN = () => n; const got = getN(); const n = 1; const getN = () => n; const got = getN(); [TypeScript Playgroundで確認]細かい点は後で解説しますが、 「変数は内部的には大きく2種類の型を持つこと」、「 1 という型を明示的に指定するかどうかで結果が変わりうること」がそれぞれ確認できました。なお、const n: 1 = 1; は const n = 1 as const; と書いても同等です。Type Narro…

zenn.dev
Related Topics: TypeScript