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)。

キーワード