前提
この記事は、初学者の私が、サバイバルTypeScriptで学んだこと+調べたことをまとめたものになります。
従って、経験則に基づいた発言ではないため、一部慣習とは違っていたり、認知にずれがあったりする可能性がありますので、ぜひコメントで指摘していただけると幸いです。
環境
記事内のコードは以下の環境で動作確認済みです。
- Node.js: v22.10.0
- TypeScript: Version 5.6.3
タプルとは?
- 異なる型の値を要素として持つことができる配列
- 型の種類、型の順番、要素の数が固定される
- インデックスや分割代入による値へのアクセスが可能
- Promise.all()との併用により並列処理を実装できる
pythonにおけるタプルは、値を変更できない配列(リスト) を指すが、
TypeScriptにおけるタプルは、値の変更はできる。
配列との違い
配列 | タプル | |
---|---|---|
複数の型の格納 | 非推奨 ユニオン型を使えば出来ないことはない |
OK |
長さの変更 | OK (.push() メソッドによる追加) |
NG |
変数の順序 | 特に指定はなし(ユースケースによる) | 宣言時の型の順番に従う |
Arrayによる宣言 | 可能 | 不可 |
タプルと型
- タプル宣言時に[type,type...]の形式で型注釈を行う
- 同様の形式で型エイリアスの宣言も可能
- 型の順番は固定される
実装例
タプル
//宣言
const human:[string,number] = [ "taro", 20 ];
//インデックスによるアクセス
console.log(human[0]); //=>taro
console.log(human[1]); //=>20
//分割代入
//型注釈が無くてもエラーは出ない
const [name,age]:[string,number] = human;
console.log(name); //=>taro
console.log(age); //=>20
//値の追加(NG)
human.push(5) //=> Error
タプルを使った並列処理
//サバイバルtypescriptからの引用
//https://typescriptbook.jp/reference/values-types-variables/tuple
//タプルとPromise.allによる並列処理
//stringとnumberが格納されたタプルを取得できる
//完了までの所要時間は5秒
const tuple: [string, number] = await Promise.all([
takes3Seconds(), //処理に 3 秒かかり、string を返す関数
takes5Seconds(), //処理に 5 秒かかり、number を返す関数
]);
まとめ
以上になります。
慣例から外れた部分があれば指摘していただけると幸いです!!