やあ、こんにちは。TypeScriptの世界へようこそ。
型定義の世界に足を踏み入れたばかりだと、最初は「なんでこんなに細かいルールがあるんだ!」と頭を抱えたくなることもあるよね。でも大丈夫、それは君がコードの未来をより安全で強固なものにしようと、真剣に向き合っている証拠だよ。
今日は、タプルという「ちょっと特殊なリスト」の中に、魔法のような機能を持たせる「レスト要素(Rest Elements)」についてお話ししよう。
—
タプルって、何者?
まずは基本のおさらい。普通の配列(`number[]`など)は、「箱の中に数字がいくつ入っていてもいいよ」という大らかなものだけど、タプルは「1番目は名前、2番目は年齢、3番目は……」と、順番と型をガチガチに決めた「お弁当箱」のようなものだと思ってほしい。
// 役割が決まったお弁当箱
let user: [string, number] = [“Alice”, 25];
これまでは「中身は2つだけ!」と決めていたけれど、開発の現場では「最初の2つは固定だけど、あとは何が入ってくるか分からない(あるいは、いくらでも入る)」という状況によく遭遇するんだ。
そんな時に登場するのが「レスト要素(`…`)」という名の魔法だよ。
—
レスト要素で「自由な余白」を作る
想像してみてほしい。スーパーのレジで、最初にお客さんの「名前」と「会員番号」をスキャンして、その後に「買った商品のリスト」が何個続くか分からない……そんな状況を。
これをTypeScriptで表現するとこうなる。
// [名前, 会員番号, …買った商品たちのリスト]
type ShoppingRecord = [string, number, …string[]];
const record: ShoppingRecord = [“Taro”, 1001, “りんご”, “バナナ”, “牛乳”];
この `…string[]` が、まさに「レスト要素」だ。
「最初の2つは絶対にこれ!あとは何個あってもいいから、全部 `string` として受け取って配列にまとめちゃうよ!」という頼もしい宣言なんだ。
なぜこれが必要なの?
もしレスト要素を使わなかったら、要素の数が変わるたびにいちいち型を定義し直さないといけない。そんなの、コードが悲鳴を上げてしまうよね。これを使えば、「決まったルール」と「可変の自由」をスマートに両立できるんだ。
—
現場で役立つ「型推論」の挙動
TypeScriptの賢いところは、このレスト要素を置いた場所によって、推論の仕方を絶妙に変えてくれるところだ。
1. 後ろに配置する(基本形)
先ほどの例のように、最後に置くのが一般的だ。これは「固定された情報の後に、余ったものを全部回収する」という整理整頓のイメージだね。
2. 前に配置するのはNG?
実は、レスト要素をタプルの「真ん中」や「先頭」に置くことは、現在のTypeScriptでは基本的にはできないようになっているんだ。
「どこからどこまでがレストで、どこからが固定なのか」が分からなくなってしまうからだね。ルールはシンプルであるほど、バグは減る。これはTypeScriptからの「迷子にならないための優しい制約」なんだよ。
—
実践コード:こんな風に使ってみよう
例えば、関数の引数を受け取るときに、このタプルを活用するととても綺麗に書ける。
// ログを出力する関数
// 最初の要素は「タグ」、残りは「メッセージ」として受け取る
function logMessage(tag: string, …details: string[]) {
console.log(`[${tag}]:`, details.join(” / “));
}
// 呼び出し側
logMessage(“INFO”, “サーバー起動”, “ポート8080”, “データベース接続完了”);
// 出力:[INFO]: サーバー起動 / ポート8080 / データベース接続完了
このコードでは、`…details` が「INFO」以外の残りのメッセージをすべて拾い上げてくれている。引数の数が可変でも、型が守られているから安心感が違うよね。
—
最後に:つまずいたあなたへ
レスト要素を初めて見たとき、「`…`って何?コピーしてるの?」と混乱する人が多いけれど、大丈夫。これは「余ったものを全部まとめて、この箱に詰め込んでね」という指示書だと捉えてみて。
TypeScriptは、君が書いたコードの意図を汲み取って、先回りしてエラーを防ごうとしてくれる、最高の「ペアプログラマー」だよ。最初は難しく感じるかもしれないけれど、この「型」という武器を身につければ、数ヶ月後の自分が書いたコードに「ありがとう」と言いたくなる日が必ず来る。
まずはエディタを開いて、自分の好きなデータ構造で試してみて。もしエラーが出ても、それは「もっと賢くなれるよ」というヒントだからね。
焦らず、一歩ずつ進んでいこう!応援しているよ。

コメント