Effective TypeScript 第2版

―型システムの力を最大限に引き出す83項目

[cover photo]
TOPICS
JavaScript
発行年月日
PRINT LENGTH
448
ISBN
978-4-8144-0109-3
原書
Effective TypeScript, 2nd Edition
FORMAT
Print PDF EPUB
Print
4,620円

TypeScriptの実用書。TypeScriptは、驚異的な柔軟性と豊かな表現力を備えた型システムを持ち、JavaScriptコミュニティに広く浸透しています。その一方、TypeScriptは多くの高度な機能を持つため、それらを使いこなし、真に「effectiveな」TypeScriptコードを書ける開発者は決して多くありません。本書では、TypeScriptを最大限に活用するための83項目のアドバイスを、実践的なコードとともに提供します。本書を読めば、TypeScriptの基本をマスターしたばかりの初級者が中級者へ、そしてTypeScript言語を使いこなすエキスパートへとステップアップできるでしょう。

関連ファイル

目次

賞賛の声
訳者まえがき
まえがき(第2版)
まえがき(初版)

1章 TypeScriptとは何か
    項目1 TypeScriptとJavaScriptの関係を理解する
    項目2 どのTypeScriptオプションが使われているか把握する
    項目3 コード生成は型に依存しないことを理解する
    項目4 構造的型付けに慣れる
    項目5 any型の使用を制限する

2章 TypeScriptの型システム
    項目6 エディターを使って型システムを調査、探求する
    項目7 型を値の集合として考える
    項目8 型空間のシンボルと値空間のシンボルの見分け方を知る
    項目9 型アノテーションを型アサーションより優先的に使用する
    項目10 ラッパーオブジェクト型(String、Number、Boolean、Symbol、BigInt)を使用しない
    項目11 余剰プロパティチェックと型チェックを区別する
    項目12 可能なら関数式全体に型を適用する
    項目13 type(型エイリアス)とinterfaceの違いを知る
    項目14 readonlyを使用して変更にまつわるエラーを避ける
    項目15 型演算とジェネリック型を使って重複を避ける
    項目16 インデックスシグネチャよりも適切な代替手段を使う
    項目17 数値型のインデックスシグネチャを避ける

3章 型推論と制御フロー解析
    項目18 推論可能な型でコードを乱雑にしない
    項目19 異なる型には異なる変数を使う
    項目20 変数の型がどのように決まるか理解する
    項目21 オブジェクトを一度に構築する
    項目22 型の絞り込みを理解する
    項目23 エイリアスを作成したら一貫してそれを使う
    項目24 型推論に文脈がどう使われるか理解する
    項目25 進化する型を理解する
    項目26 関数型の標準APIやライブラリを使って型の流れを促進する
    項目27 コールバックの代わりにasync関数を使用して型の流れを改善する
    項目28 クラスやカリー化を使って型パラメーターを段階的に割り当てる

4章 型設計
    項目29 有効な状態のみ表現する型を作る
    項目30 入力には寛容に、出力には厳格に
    項目31 型情報をドキュメントで繰り返さない
    項目32 nullやundefinedを型エイリアスに含めない
    項目33 null値を型の外側に押しやる
    項目34 ユニオンを含むインターフェイスよりも、インターフェイスのユニオンを選択する
    項目35 stringよりもそれに代わる、より精度の高い型を選択する
    項目36 特別な値には専用の型を使用する
    項目37 オプションプロパティは限定的に使用する
    項目38 同じ型のパラメーターの繰り返しを避ける
    項目39 差異のモデリングより型の統一を優先する
    項目40 正確でない型より精度の低い型を選択する
    項目41 ドメインの言語を使って型を命名する
    項目42 たまたま目にしたデータに基づく型を避ける

5章 不健全性とany型
    項目43 可能なかぎり狭いスコープでany型を使う
    項目44 anyをそのまま使うのではなく、より具体的な形式で使う
    項目45 安全でない型アサーションを、適切に型付けされた関数の内部に隠す
    項目46 型が不明な値には、anyではなくunknownを使う
    項目47 モンキーパッチではなく、より型安全なアプローチを採用する
    項目48 健全性の罠を回避する
    項目49 型カバレッジを監視し、型安全性のリグレッションを防ぐ

6章 ジェネリックと型レベルプログラミング
    項目50 ジェネリックを型に対する関数と考える
    項目51 不必要な型パラメーターを避ける
    項目52 オーバーロードシグネチャより条件型を優先的に使用する
    項目53 条件型のユニオンでの分配を制御する
    項目54 テンプレートリテラル型を使ってDSLや文字列間の関係をモデリングする
    項目55 型のテストを書く
    項目56 型の表示に配慮する
    項目57 再帰的なジェネリック型は末尾再帰にする
    項目58 コード生成を複雑な型の代替手段として検討する

7章 TypeScriptレシピ集
    項目59 never型を使って網羅性チェックを行う
    項目60 オブジェクトに対して反復処理する方法を知る
    項目61 Record型を使って値の同期を保つ
    項目62 レストパラメーターとタプル型を使って、可変長引数の関数をモデリングする
    項目63 never型のオプションプロパティを使って、排他的論理和をモデリングする
    項目64 名前的型付けのためにブランドを使うことを検討する

8章 型宣言と@types
    項目65 TypeScriptと@typesはdevDependenciesに追加する
    項目66 型宣言の依存関係に関わる3つのバージョンを理解する
    項目67 パブリックなAPIで使われるすべての型をエクスポートする
    項目68 APIのコメントにTSDocを使う
    項目69 コールバックのthisがAPIの一部なら、それに型を与える
    項目70 型を部分的にコピーして依存を断ち切る
    項目71 モジュールオーグメンテーションを使って型を改善する

9章 コードを書いて実行する
    項目72 TypeScriptの独自機能の使用を避け、ECMAScriptの機能を使う
    項目73 ソースマップを使ってTypeScriptをデバッグする
    項目74 実行時に型を再構築する方法を知る
    項目75 DOMの型階層を理解する
    項目76 ターゲットとする環境の正確なモデルを作る
    項目77 型チェックとユニットテストの関係を理解する
    項目78 コンパイラーのパフォーマンスに注意を払う

10章 コードのモダン化とTypeScriptへの移行
    項目79 モダンなJavaScriptを書く
    項目80 @ts-checkとJSDocを使ってTypeScriptを試す
    項目81 allowJsを使ってTypeScriptとJavaScriptを共存させる
    項目82 依存関係グラフの下から上へモジュールごとに移行する
    項目83 noImplicitAnyを有効にするまで、移行が完了したと考えない

付録A 初版の項目とのマッピング

付録B 推奨事項の実践法
    項目84 コンパイラーオプションやリンターを使ってコードに規約を適用する

索引