サバイバルTypeScript 新しい章立て

Get Started. It's Free
or sign up with your email address
サバイバルTypeScript 新しい章立て by Mind Map: サバイバルTypeScript 新しい章立て

1. はじめに

2. 索引

3. Tips

4. 読んで学ぶTypeScript

4.1. 型、値、変数

4.1.1. 変数

4.1.1.1. 変数宣言

4.1.1.1.1. let

4.1.1.1.2. const

4.1.1.1.3. letとconstの使い分け

4.1.1.2. varとその問題点

4.1.1.2.1. varの変数宣言

4.1.1.2.2. varの問題点

4.1.1.3. 変数の型注釈

4.1.1.4. 変数の型推論

4.1.1.5. 型推論と動的型付けの違い

4.1.2. プリミティブ型

4.1.2.1. プリミティブ型

4.1.2.2. 論理型(boolean)

4.1.2.2.1. 論理型リテラル

4.1.2.2.2. 論理型の型注釈

4.1.2.3. 数値型(number)

4.1.2.3.1. 数値型リテラル

4.1.2.3.2. 数値型の型注釈

4.1.2.3.3. Infinity

4.1.2.3.4. NaN

4.1.2.3.5. 小数計算の誤差

4.1.2.4. 文字列型(string)

4.1.2.4.1. 文字列リテラル

4.1.2.4.2. テンプレートリテラル

4.1.2.4.3. 文字列の型注釈

4.1.2.4.4. 文字列結合

4.1.2.5. null型

4.1.2.5.1. nullリテラル

4.1.2.5.2. nullの型注釈

4.1.2.5.3. typeofの注意点

4.1.2.6. undefined型

4.1.2.6.1. undefinedリテラル

4.1.2.6.2. undefinedの型注釈

4.1.2.7. undefinedとnullの違い

4.1.2.8. シンボル型(symbol)

4.1.2.9. bigint型

4.1.2.10. 型強制(type coercion)

4.1.2.11. リテラル型

4.1.3. any型

4.1.4. unknown型

4.1.5. unknownとanyの違い

4.1.6. オブジェクト型

4.1.6.1. プリミティブ型以外はすべてがオブジェクト

4.1.6.2. オブジェクトリテラル

4.1.6.3. オブジェクトのプロパティ

4.1.6.4. オブジェクトの型アノテーション

4.1.6.5. readonlyプロパティ

4.1.6.6. インデクスシグネチャ

4.1.6.7. プロトタイプベース

4.1.6.8. object、{}、Objectの違い

4.1.6.9. オブジェクトの分割代入

4.1.7. 構造的部分型

4.1.7.1. 派生型の2つの種類

4.1.7.1.1. 公称型

4.1.7.1.2. 構造的部分型

4.1.7.2. 公称型に慣れている人が構造的部分型で注意すること

4.1.8. 配列

4.1.8.1. 配列リテラル

4.1.8.2. 配列の型アノテーション

4.1.8.2.1. Array<T>

4.1.8.3. オブジェクトとしての配列

4.1.8.3.1. PHPでは[1,2,3]==[1,2,3]だけど、JavaScriptでは[1,2,3] == [1,2,3]がfalse

4.1.8.4. readonly配列

4.1.8.4.1. ReadonlyArray<T>

4.1.8.5. 配列の分割代入

4.1.8.6. 配列の操作の注意点

4.1.8.6.1. Arrayのメソッドにはミュータブルな操作があるので注意。

4.1.8.7. 配列をループする方法

4.1.8.7.1. for構文

4.1.8.7.2. 拡張for構文

4.1.8.7.3. map

4.1.8.7.4. forEach

4.1.8.7.5. どれを使うべきか?

4.1.9. タプル型

4.1.9.1. タプル型の基礎

4.1.9.1.1. タプル値の作り方

4.1.9.1.2. タプルの型アノテーション

4.1.9.1.3. タプルへのアクセス

4.1.9.2. タプルが解決する問題

4.1.9.3. タプルの戻り値を変数に代入する

4.1.9.3.1. 分割代入が便利だよ

4.1.9.4. タプル型を使う場面

4.1.10. 列挙型

4.1.10.1. 数値列挙型(number enum)

4.1.10.2. 文字列列挙型(string enum)

4.1.10.3. 列挙型(enum)を使わない

4.1.11. ユニオン型

4.1.12. 判別可能なユニオン型

4.1.13. インターセクション型

4.1.14. 型エイリアス

4.1.15. 型アサーション「as」

4.1.16. const assertion

4.1.17. never型

4.1.18. definite assignment assertion

4.1.18.1. let x!: string

4.1.19. typeof演算子

4.2. 式と演算子

4.2.1. 何を書くべきか?

4.3. 文

4.3.1. 変数スコープ

4.3.1.1. varのスコープの問題

4.3.2. if-else構文

4.3.3. for-of構文

4.3.4. switch構文

4.3.4.1. switch構文と変数スコープ

4.3.4.2. switchとneverを使った網羅チェック

4.3.5. try-catch構文

4.3.6. control flow analysisと型ガード

4.4. 関数

4.4.1. 関数宣言(function構文)

4.4.1.1. 関数宣言の型アノテーション

4.4.1.1.1. 戻り値は型推論可能です

4.4.2. 関数宣言と巻き上げ

4.4.3. 無名関数(関数式)

4.4.3.1. 巻き上げが起こらないよ

4.4.4. アロー関数

4.4.4.1. アロー関数の型アノテーション

4.4.4.1.1. 戻り値は型推論可能です

4.4.5. 関数とアロー関数どちらを使うべき?

4.4.5.1. TypeScriptの観点で

4.4.6. 即時実行関数

4.4.7. コールバック関数

4.4.7.1. コールバック関数とthis

4.4.8. オーバーロード関数

4.4.9. 関数は値

4.4.10. 関数はオブジェクト

4.4.11. 関数と変数スコープ

4.4.12. 戻り値の無い関数(void型)

4.4.12.1. voidを説明する

4.4.13. オプショナル引数

4.4.14. デフォルト引数

4.4.14.1. JSでのデフォルト引数の書き方

4.4.14.2. TSでの書き方

4.4.14.3. TSで引数型パラメーターを省略した場合の型推論

4.4.15. 残余引数

4.4.16. this引数

4.4.17. 分割代入引数

4.4.18. ROROパターン

4.4.19. 戻り値のthis

4.4.20. 型ガード関数

4.4.21. Assertion関数

4.5. 非同期プログラミング

4.5.1. ブロッキングとノンブロッキング

4.5.2. コールバック地獄

4.5.3. Promise

4.5.4. async

4.5.5. await

4.6. オブジェクト指向

4.6.1. クラス

4.6.1.1. クラスを定義する

4.6.1.1.1. クラスからオブジェクトを生成する

4.6.1.2. フィールドを定義する

4.6.1.3. メソッドを定義する

4.6.1.4. アクセス修飾子

4.6.1.5. readonly修飾子

4.6.1.6. コンストラクタを定義する

4.6.1.7. コンストラクターショートハンド

4.6.1.8. クラスフィールドを定義する

4.6.1.8.1. クラスフィールドを使う

4.6.1.9. クラスメソッドを定義する

4.6.1.9.1. クラスメソッドを使う

4.6.1.10. クラスの継承

4.6.1.11. instanceof演算子

4.6.1.12. 親クラスのプロパティを使う

4.6.1.13. 非パブリックプロパティがあるクラスは公称型になる

4.6.2. インターフェイス

4.6.2.1. インターフェイスを定義する

4.6.2.1.1. インターフェイスを利用する

4.6.2.2. クラスでインターフェイスを実装する

4.6.2.3. インターフェイスのreadonly修飾子

4.6.2.4. インターフェイスの継承

4.6.2.5. open-endedとdeclaration marging

4.6.2.6. instanceofは使えません

4.6.3. 抽象クラス

4.6.3.1. 抽象クラスを定義する

4.6.3.2. 抽象クラスの特徴

4.6.3.3. 抽象メソッド

4.6.3.4. 抽象クラスを継承する

4.6.4. finalクラスとfinalメソッド

4.6.4.1. TypeScriptにはfinalやsealedはありません

4.7. モジュール

4.7.1. import

4.7.2. export

4.7.3. require

4.8. シングルプロセスとシングルスレッド

4.9. 型の再利用

4.9.1. typeof型演算子

4.9.2. keyof型演算子

4.9.3. ユーティリティ型

4.9.3.1. Required

4.9.3.2. Readonly

4.9.3.3. Partial

4.9.3.4. Record

4.9.3.5. Pick

4.9.3.6. Omit

4.9.3.7. Exclude

4.9.3.8. Extract

4.9.4. Mapped Types

4.9.5. Indexed Access Types

4.10. ジェネリクス

4.10.1. ジェネリクスが解決する問題

4.10.2. ジェネリクスが用いられている標準ライブラリ

4.10.3. 型変数

4.10.4. 型引数の制約

4.10.5. デフォルト型引数

4.11. tsconfig

4.11.1. シングルプロセスとシングルスレッド

4.11.2. 厳密な型チェック (Strict Type-Checking Options)

4.11.2.1. noImplicitAny

4.11.2.2. strictNullChecks

4.11.2.3. strictFunctionTypes

4.11.2.4. strictBindCallApply

4.11.2.5. strictPropertyInitialization

4.11.2.6. noImplicitThis

4.11.2.7. alwaysStrict

4.11.3. 追加のチェック (Additional Checks)

4.11.3.1. noUnusedLocals

4.11.3.2. noUnusedParameters

4.11.3.3. noImplicitReturns

4.11.3.4. noFallthroughCasesInSwitch

4.11.3.5. noUncheckedIndexedAccess

4.11.3.6. noImplicitOverride

4.11.3.7. noPropertyAccessFromIndexSignature

4.12. 定義ファイル

4.13. 本書では(まだ)扱わない サバイバルじゃない Advanced Topics

4.13.1. ジェネレーター

4.13.2. getter/setter

4.13.3. デコレーター

4.13.4. サーバーサイドの話

4.13.5. パッケージ頒布

4.13.5.1. Dual Package

4.13.5.2. パッケージを使う人にもTypeScriptによる型の享受を目指す

4.13.6. Type predicate, Assertion functionsのつかいかた Optional<T>

4.13.7. namespace

5. 作って学ぶTypeScript

6. TypeScriptのあらまし

6.1. TypeScriptの特徴

6.2. JavaScriptはTypeScriptの一部

6.2.1. JavaScriptはTypeScriptの一部

6.2.2. TypeScriptを書くにはJavaScriptを知らないといけない

6.2.3. TypeScriptの学習と並行してJSも学ぼう

6.2.3.1. 本書はそういう学びを想定した作りになっている

6.3. TypeScript誕生の背景 (歴史)

6.4. JavaScriptエコシステム (地理)

6.4.1. JavaScript

6.4.2. ECMAScript

6.4.3. AltJS

6.4.3.1. TypeScript

6.4.3.2. PureScript

6.4.3.3. Reason

6.4.3.4. Elm

6.4.4. バンドラー

6.4.4.1. webpack

6.4.4.2. parcel

6.4.5. タスクランナー

6.4.5.1. gulp

6.4.5.2. grunt

6.4.6. パッケージマネージャー

6.4.6.1. npm

6.4.6.2. yarn

6.4.7. サーバーサイド

6.4.7.1. Node.js

6.4.7.2. Deno

6.4.8. リンター

6.4.8.1. eslint

6.4.9. コードフォーマッター

6.4.9.1. Prettier

6.4.10. テスト

6.4.10.1. Jest

6.4.11. フレームワーク

6.4.11.1. React

6.4.11.2. Vue

6.4.11.3. Angular

6.5. 静的型付け

6.6. なぜTypeScriptを使うべきか

6.7. ECMAScript

6.7.1. ECMAScriptはJSの仕様

6.7.1.1. TSはJSの拡張なので、ESのアップデートは取り込まれる

6.7.2. 仕様策定プロセス

6.7.2.1. stageとかの説明

6.7.2.2. TSはstage 3になったものが取り込まれる

6.7.3. ESは後方互換性を重視する

6.7.3.1. 10年前のJSとかも動くよ

6.7.3.2. とにかく動いているJSを壊さないようにする

6.7.3.3. なんで後方互換性を大事にするの?

6.7.3.3.1. 実行環境のアップデートが難しい

6.7.3.3.2. ブラウザはサービスプロバイダーがコントロールしにくい

6.7.3.3.3. サーバサイドなら自分でコントロールできるけど

6.7.3.4. プログラマにとっても資産が積み上げになるから嬉しい