TypeScriptで実装しているときに取ったメモも備忘録として残しておきます。
型の曖昧だった部分を中心にメモを取っており、確かに忘れやすいので今後も読んで復習します。
型推論
TypeScriptには型推論があるため、すべての変数に明示的な型指定が必要なわけではない。
たとえばconst count = 1と書くと、countはnumber型として推論される。型が分かりにくい場所や、関数の引数・戻り値などで型指定を足していく。
基本的な型
プリミティブ型
JavaScriptにもある、シンプルな値の型。
numberstringbooleannullundefinedbigintsymbol
オブジェクト型
プロパティを持つ、複雑な構造の型。
オブジェクト、配列、クラスのインスタンス、関数などが入る。objectはプリミティブ型以外を表す型だが、実際にはプロパティを指定したオブジェクト型や、type、interfaceを使うことが多い。
ユニオン型
複数の型のどれかを許容したいときに使う。型と型の間を|でつなぐ。
let input: string | number;
input = 'hello';
input = 42;
string | numberの場合、どちらの型でも使える操作しかできない。文字列用のメソッドを使いたいときは、あとで型ガードして絞り込む。
型エイリアス
よく使う型に名前を付けて、再利用できるようにする機能。
type User = {
name: string;
age: number;
};
const user: User = { name: 'Eve', age: 22 };
オブジェクトの形を何度も書かずに済む。APIのレスポンスやpropsの型にも使える。
ジェネリクス
「あとで決まる型」を扱うための機能。
<T>で型変数を定義する。TはTypeの頭文字としてよく使われるが、U、K、Vなど、意味が分かる名前なら何でもよい。
function echo<T>(value: T): T {
return value;
}
echo('hello'); // string型
echo(123); // number型
echo(true); // boolean型
引数で受け取った型と、戻り値の型を同じにしたいときに便利。
型ガード
値がどの型なのかを、コードの中で判断して型を絞り込む方法。ユニオン型を扱うときによく使う。
-
typeof:stringやnumberなど、プリミティブ型を確認する -
instanceof:特定のクラスのインスタンスかを確認する -
in:オブジェクトに特定のプロパティがあるかを確認する - カスタム型ガード関数:
value is 型の形で、型ガードであることを定義する
typeof input === 'string'のように確認すると、その分岐の中ではinputをstring型として扱える。
ユーティリティ型
TypeScriptが最初から用意している、既存の型を加工するための型。
| 型名 | 説明 | よくある用途 |
|---|---|---|
Partial<T> |
Tのすべてのプロパティをオプショナルにする |
一部だけ更新したいとき |
Required<T> |
Tのすべてのプロパティを必須にする |
必須項目が揃ったデータを扱うとき |
Readonly<T> |
Tのプロパティを読み取り専用にする |
書き換え禁止の設定など |
Pick<T, K> |
Tから指定したプロパティだけ取り出す |
必要な項目だけ使いたいとき |
Omit<T, K> |
Tから指定したプロパティを除外する |
特定の項目を除きたいとき |
Record<K, T> |
Kのキーに対してT型の値を持つオブジェクトを作る |
決まったキーと型のオブジェクトを作るとき |
参考:
サバイバルTypeScript