| やりたいこと | 書き方 | 詳しくは |
|---|---|---|
| 取りうる値を限定したい | type S = "a" | "b"; | 04.3 |
enum のようなものが欲しい | 文字列リテラルの union | 04.3 |
| プロパティを省略可能にしたい | age?: number | 04.2 |
| 書き換えを禁止したい | readonly | 04.1 |
| 2つの型を合体したい | A & B | 04.4 |
| 値をそのまま型にしたい | as const | 04.3 |
| 一部だけ省略可能にしたい | Partial<T> | A4.1 |
| 特定のキーだけ取り出したい | Pick<T, K> / Omit<T, K> | A4.1 |
| 同じ形の ID を取り違えたくない | ブランド型 | 05.4 |
| やりたいこと | 書き方 | 詳しくは |
|---|---|---|
| union のどれか判定したい | typeof / in / 判別可能ユニオン | 08 |
| 分岐の漏れを検出したい | never による網羅性チェック | 08.5 |
| 判定を関数に切り出したい | v is T | 08.4 |
null のとき既定値を使いたい | ??(|| ではない) | 04.5 |
| 外部から来た JSON を安全に使いたい | unknown + 型ガード | 06.2・A3.1 |
| 失敗を戻り値で返したい | Result<T, E> | 11.4・A2.1 |
エラーメッセージは既定で英語です。
npx tsc --locale ja で日本語になります。ただし検索するときは英語のほうが情報が見つかります。番号(TS2322 など)で検索するのが最も確実です。
| 番号 | メッセージ(抜粋) | 原因と対処 | 詳しくは |
|---|---|---|---|
TS2322 | Type 'X' is not assignable to type 'Y'. | 代入しようとした型が合わない。strictNullChecks による null の混入が多い | 03.2 |
TS2345 | Argument of type 'X' is not assignable to parameter of type 'Y'. | 引数の型が合わない | 07.1 |
TS2353 | Object literal may only specify known properties… | 余剰プロパティチェック。打ち間違いか、意図的な追加 | 05.2 |
TS2339 | Property 'x' does not exist on type 'Y'. | union のまま使っている。絞り込みが要る | 08 |
| 番号 | メッセージ(抜粋) | 原因と対処 | 詳しくは |
|---|---|---|---|
TS18048 | 'x' is possibly 'undefined'. | ?. か ??、または if で確かめる | 04.5 |
TS2531 | Object is possibly 'null'. | 同上 | 04.5 |
TS18046 | 'e' is of type 'unknown'. | catch の変数。instanceof Error で確かめる | 11.3 |
| 番号 | メッセージ(抜粋) | 原因と対処 | 詳しくは |
|---|---|---|---|
TS7006 | Parameter 'x' implicitly has an 'any' type. | 引数に型を書く。TS7 7 では strict が既定で有効 | 03.2 |
TS2693 | 'X' only refers to a type, but is being used as a value here. | 型を値として使った。interface に instanceof は使えない | 01.3 |
TS2591 | Cannot find name 'node:fs'. …install type definitions for node? | TS7 @types/node と "types": ["node"] の両方が要る | 02.4 |
TS2564 | Property 'x' has no initializer… | クラスのプロパティを初期化する | 03.2 |
| 番号 | メッセージ(抜粋) | 原因と対処 | 詳しくは |
|---|---|---|---|
TS5112 | tsconfig.json is present but will not be loaded… | TS7 コマンドラインにファイル名を書くと設定が無視される | 02.2 |
TS1064 | The return type of an async function must be the global Promise<T> type. | async の戻り値を Promise<T> にする | 11.1 |
TS2307 | Cannot find module 'x' or its corresponding type declarations. | 型定義がない。@types を探すか自分で書く | 10.4 |
| JavaScript でのやり方 | TypeScript で足すこと | 詳しくは |
|---|---|---|
const x = 1; | そのままでよい(推論される) | 04.1 |
function f(a, b) {} | 引数に型を書く(strict では必須) | 07.1 |
JSON.parse(s) | 戻り値は any。unknown で受けて検証する | 06.2 |
arr.filter(x => x) | 型を絞りたいなら (x): x is T => | 08.4 |
catch (e) { e.message } | e は unknown。instanceof Error で確かめる | 11.3 |
| Java | TypeScript | 詳しくは |
|---|---|---|
enum Status { A, B } | type Status = "A" | "B"; | 04.3 |
Optional<T> | T | undefined と ?./?? | 04.5 |
implements | 不要(形が合えば互換)。書いてもよい | 05.3 |
x instanceof MyInterface | 書けない。型ガード関数を書く | 08.4 |
List<String> | string[] | 04.1 |
Map<K,V> | Map<K,V> または Record<K,V> | A4.1 |
throws IOException | 型に現れない。Result を検討する | 11.4 |
<T extends Comparable> | <T extends { ... }> | 09.2 |
| 用語 | 意味 | 詳しくは |
|---|---|---|
| 型消去 | 型が実行時に残らないこと。TypeScript の型はすべて消える | 01.2 |
| 構造的型付け | 名前ではなく形で互換を判定する方式 | 05.1 |
| 名前的型付け | 型の名前が一致しないと互換にならない方式(Java・C#) | 05.1 |
| 余剰プロパティチェック | オブジェクトリテラルを直接書いたときだけ、余分なプロパティを弾く仕組み | 05.2 |
| ブランド型 | 実体のない目印を足して、同じ形の型を区別する手法 | 05.4 |
| 型アサーション | as。検査を黙らせるだけで、値は変わらない | 06.3 |
| 絞り込み(narrowing) | 条件分岐によって、その位置での型が狭まること | 08.1 |
| 判別可能ユニオン | 共通のキーに別々のリテラル型を持たせた union | 08.3 |
| 型ガード | v is T を返す関数。絞り込みを関数に切り出す | 08.4 |
| 網羅性チェック | never を使い、分岐の漏れをコンパイル時に検出する手法 | 08.5 |
| 変性(共変・反変) | ある型の代わりに、広い/狭い型を使えるかの規則 | 09.4 |
| ESM / CJS | 2つのモジュール方式。package.json の "type" が決める | 10.2 |
宣言ファイル(.d.ts) | 型だけを書いたファイル。実装は含まない | 10.3 |
| 型ストリップ | 型注釈を取り除くだけで実行する方式。Node が採用 | 02.3 |
| Mapped Types | 既存の型のキーを回して新しい型を作る記法 | A4.2 |
| Conditional Types | 条件によって結果が変わる型(T extends U ? X : Y) | A4.3 |