TL;DR
- TypeScript では、変数の値は変えられるが、型は基本的に変わらない。
- 1 つの変数を異なる型の値に使い回すのは避け、型ごとに別の変数を使う。
内容
変数の型は基本的に変わらない
TypeScript では、変数の値は変えられても、型は一般に変わらない。例外は型の絞り込み(項目22)と進化する型(項目25)である。
異なる型の値に変数を使い回さない
1 つの変数を異なる型の値に再利用すると、型推論がうまく効かない。また、値が変わるので処理を追いにくくなり、変数名も抽象的になるため、可読性が下がる。
// NG
let productId: string | number = "12-34-56"
// ...
productId = 123456
// OK
const productId = "12-34-56"
// ...
const serial = 123456シャドーイングとは別の話
内側のスコープで同じ名前の変数を宣言するシャドーイングは、変数の再利用とは別物である。
const productId = "12-34-56"
fetchProduct(productId)
{
const productId = 123456
fetchProductBySerialNumber(productId)
}ただし、シャドーイングも可読性を下げるので避けたほうがよい。ESLint の no-shadow ルールで禁止できる。
異なる型の値に同じ変数を使い回さないことは、オブジェクトにも当てはまる(項目21)。