型のスコープ
TypeScriptの型の絞り込みにはスコープが存在します。
スコープというのは、有効な範囲のことで、宣言した変数を使える範囲などもスコープと言ったりします。
const a: number | string = 1
if (typeof a === "string") {
// この中ではaはstringとして扱える
}
// しかし一旦外に出ればnumber | stringに戻ってしまう
これが関数で、if文の中でreturnした場合なんかにはこうなります。
function main() {
const a: number | string = 1
if (typeof a === "string") {
return
}
// ここではnumber型になります
}
それと注意したいのが、関数を抜けるとスコープが切れるということです。
function isString(a: unknown): boolean {
if (typeof a === "string") {
return true
} else {
return false
}
}
function main() {
const a: number | string = 1
if (isString(a)) {
// aは number | string 型のまま
} else {
// aは number | string 型のまま
}
}
これを実現したい場合には型ガード関数と呼ばれるTypeScriptの機能を使います。それについては別の章でやります。