プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

Book description

プログラミング言語TypeScriptの解説書。TypeScriptの型に関する基礎的な内容からその応用、エラー処理の手法、非同期プログラミング、各種フレームワークの利用法、既存のJavaScriptプロジェクトのTypeScript移行の方法まで、言語全般を総合的に解説します。本書全体を通じて、TypeScriptの洗練された型システムを最大限活用するために、コードをどのように記述すべきか、なぜそうすべきかを学べます。

Table of contents

  1.  大扉
  2.  原書大扉
  3.  クレジット
  4.  献辞
  5.  賞賛の声
  6.  監訳者まえがき
  7.  まえがき
  8.   本書の構成
  9.   スタイル
  10.   表記上のルール
  11.   サンプルコードの使用について
  12.   意見と質問
  13.   謝辞
  14.  1章 イントロダクション
  15.  2章 TypeScript:全体像
  16.   2.1 コンパイラー
  17.   2.2 型システム
  18.    2.2.1 TypeScript対JavaScript
  19.   2.3 コードエディターのセットアップ
  20.    2.3.1 tsconfig.json
  21.    2.3.2 tslint.json
  22.   2.4 index.ts
  23.   2.5 練習問題
  24.  3章 型について
  25.   3.1 型についての議論
  26.   3.2 型の初歩
  27.    3.2.1 any
  28.    3.2.2 unknown
  29.    3.2.3 boolean
  30.    3.2.4 number
  31.    3.2.5 bigint
  32.    3.2.6 string
  33.    3.2.7 symbol
  34.    3.2.8 オブジェクト
  35.    3.2.9 型エイリアス、合併、交差
  36.    3.2.10 配列
  37.    3.2.11 タプル
  38.    3.2.12 null、undefined、void、never
  39.    3.2.13 列挙型
  40.   3.3 まとめ
  41.   3.4 練習問題
  42.  4章 関数
  43.   4.1 関数の宣言と呼び出し
  44.    4.1.1 オプションパラメーターとデフォルトパラメーター
  45.    4.1.2 レストパラメーター
  46.    4.1.3 call、apply、bind
  47.    4.1.4 thisの型付け
  48.    4.1.5 ジェネレーター
  49.    4.1.6 イテレーター
  50.    4.1.7 呼び出しシグネチャ
  51.    4.1.8 文脈的型付け
  52.    4.1.9 オーバーロードされた関数の型
  53.   4.2 ポリモーフィズム
  54.    4.2.1 ジェネリックはいつバインドされるか?
  55.    4.2.2 ジェネリックはどこで宣言できるか?
  56.    4.2.3 ジェネリックの型推論
  57.    4.2.4 ジェネリック型エイリアス
  58.    4.2.5 制限付きポリモーフィズム
  59.    4.2.6 ジェネリック型のデフォルトの型
  60.   4.3 型駆動開発
  61.   4.4 まとめ
  62.   4.5 練習問題
  63.  5章 クラスとインターフェース
  64.   5.1 クラスと継承
  65.   5.2 super
  66.   5.3 戻り値の型としてthisを使用する
  67.   5.4 インターフェース
  68.    5.4.1 宣言のマージ
  69.    5.4.2 実装
  70.    5.4.3 「インターフェースの実装」対「抽象クラスの拡張」
  71.   5.5 クラスは構造的に型付けされる
  72.   5.6 クラスは値と型の両方を宣言する
  73.   5.7 ポリモーフィズム
  74.   5.8 ミックスイン
  75.   5.9 デコレーター
  76.   5.10 finalクラスをシミュレートする
  77.   5.11 デザインパターン
  78.    5.11.1 ファクトリーパターン
  79.    5.11.2 ビルダーパターン
  80.   5.12 まとめ
  81.   5.13 練習問題
  82.  6章 高度な型
  83.   6.1 型の間の関係
  84.    6.1.1 サブタイプとスーパータイプ
  85.    6.1.2 変性
  86.    6.1.3 割り当て可能性
  87.    6.1.4 型の拡大
  88.    6.1.5 型の絞り込み
  89.   6.2 完全性
  90.   6.3 高度なオブジェクト型
  91.    6.3.1 オブジェクト型についての型演算子
  92.    6.3.2 レコード型
  93.    6.3.3 マップ型
  94.    6.3.4 コンパニオンオブジェクトパターン
  95.   6.4 関数にまつわる高度な型
  96.    6.4.1 タプルについての型推論の改善
  97.    6.4.2 ユーザー定義型ガード
  98.   6.5 条件型
  99.    6.5.1 分配条件型
  100.    6.5.2 inferキーワード
  101.    6.5.3 組み込みの条件型
  102.   6.6 エスケープハッチ
  103.    6.6.1 型アサーション
  104.    6.6.2 非nullアサーション
  105.    6.6.3 明確な割り当てアサーション
  106.   6.7 名前的型をシミュレートする
  107.   6.8 プロトタイプを安全に拡張する
  108.   6.9 まとめ
  109.   6.10 練習問題
  110.  7章 エラー処理
  111.   7.1 nullを返す
  112.   7.2 例外をスローする
  113.   7.3 例外を返す
  114.   7.4 Option型
  115.   7.5 まとめ
  116.   7.6 練習問題
  117.  8章 非同期プログラミングと並行、並列処理
  118.   8.1 JavaScriptのイベントループ
  119.   8.2 コールバックの処理
  120.   8.3 プロミスを使って健全さを取り戻す
  121.   8.4 asyncとawait
  122.   8.5 非同期ストリーム
  123.    8.5.1 イベントエミッター
  124.   8.6 型安全なマルチスレッディング
  125.    8.6.1 Web Worker(ブラウザー)
  126.    8.6.2 子プロセス(Node.js)*8
  127.   8.7 まとめ
  128.   8.8 練習問題
  129.  9章 フロントエンドとバックエンドのフレームワーク
  130.   9.1 フロントエンドのフレームワーク
  131.    9.1.1 React
  132.    9.1.2 Angular 6/7
  133.   9.2 型安全なAPI
  134.   9.3 バックエンドのフレームワーク
  135.   9.4 まとめ
  136.  10章 名前空間とモジュール
  137.   10.1 JavaScriptモジュールの簡単な歴史
  138.   10.2 インポート、エクスポート
  139.    10.2.1 動的インポート
  140.    10.2.2 CommonJSおよびAMDコードの使用
  141.    10.2.3 モジュールモードとスクリプトモード
  142.   10.3 名前空間
  143.    10.3.1 競合
  144.    10.3.2 コンパイルされた出力結果
  145.   10.4 宣言のマージ
  146.   10.5 まとめ
  147.   10.6 練習問題
  148.  11章 JavaScriptとの相互運用
  149.   11.1 型宣言
  150.    11.1.1 アンビエント変数宣言
  151.    11.1.2 アンビエント型宣言
  152.    11.1.3 アンビエントモジュール宣言
  153.   11.2 JavaScriptからTypeScriptへの漸進的な移行
  154.    11.2.1 ステップ1:TSCを追加する
  155.    11.2.2 ステップ2a:JavaScriptの型チェックを有効にする(オプション)
  156.    11.2.3 ステップ2b:JSDocアノテーションを追加する(オプション)
  157.    11.2.4 ステップ3:ファイルを.tsにリネームする
  158.    11.2.5 ステップ4:厳格にする
  159.   11.3 JavaScriptの型の探索
  160.    11.3.1 JavaScriptファイルが同一プロジェクト内に存在する場合
  161.    11.3.2 サードパーティーのJavaScriptモジュールを利用する場合
  162.   11.4 サードパーティーJavaScriptの使用
  163.    11.4.1 型宣言を備えているJavaScript
  164.    11.4.2 DefinitelyTypedに型宣言を持つJavaScript
  165.    11.4.3 DefinitelyTypedに型宣言を持たないJavaScript
  166.   11.5 まとめ
  167.  12章 TypeScriptのビルドと実行
  168.   12.1 TypeScriptプロジェクトのビルド
  169.    12.1.1 プロジェクトのレイアウト
  170.    12.1.2 成果物
  171.    12.1.3 コンパイルターゲットの指定
  172.    12.1.4 ソースマップを有効にする
  173.    12.1.5 プロジェクト参照
  174.    12.1.6 エラーの監視
  175.   12.2 TypeScriptをサーバー上で実行する
  176.   12.3 TypeScriptをブラウザー内で実行する
  177.   12.4 TypeScriptコードをnpmに公開する
  178.   12.5 トリプルスラッシュ・ディレクティブ
  179.    12.5.1 typesディレクティブ
  180.    12.5.2 amd-moduleディレクティブ
  181.   12.6 まとめ
  182.  13章 終わりに
  183.  付録A 型演算子
  184.  付録B 型ユーティリティ
  185.  付録C 宣言の振る舞い
  186.   C.1 それは型を生成するか?
  187.   C.2 それはマージされるか?
  188.  付録D サードパーティーJavaScriptモジュールのための宣言ファイルの書き方
  189.   D.1 エクスポートの種類
  190.    D.1.1 グローバルエクスポート
  191.    D.1.2 ES2015エクスポート
  192.    D.1.3 CommonJSエクスポート
  193.    D.1.4 UMDエクスポート
  194.   D.2 モジュールの拡張
  195.    D.2.1 グローバルな名前空間とインターフェース
  196.    D.2.2 モジュール
  197.  付録E トリプルスラッシュ・ディレクティブ
  198.   E.1 内部ディレクティブ
  199.   E.2 推奨されないディレクティブ
  200.  付録F 安全性に関するTSCコンパイラーフラグ
  201.  付録G TSX
  202.  付録H ESLintとAST
  203.   H.1 TypeScriptプロジェクトでのESLintの利用
  204.    H.1.1 パッケージのインストール
  205.    H.1.2 ESLintの新規導入
  206.    H.1.3 TSLintからの移行
  207.    H.1.4 リントの実行
  208.   H.2 TypeScript向け独自ルールの実装
  209.    H.2.1 実装するルールの仕様
  210.    H.2.2 ESLintとAST
  211.    H.2.3 ルールの実装
  212.    H.2.4 ルールの実行
  213.    H.2.5 自動修正の実装
  214.    H.2.6 自動修正の適用
  215.   H.3 そのほかの場面でのASTの用途
  216.    H.3.1 Language Serviceのプラグイン
  217.    H.3.2 Custom Transformer
  218.   H.4 まとめ
  219.  練習問題の解答
  220.   3章 型について
  221.   4章 関数
  222.   5章 クラスとインターフェース
  223.   6章 高度な型
  224.   7章 エラー処理
  225.   8章 非同期プログラミングと並行、並列処理
  226.   10章 名前空間とモジュール
  227.  奥付

Product information

  • Title: プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発
  • Author(s): Boris Cherny, 今村 謙士, 原 隆文
  • Release date: March 2020
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784873119045

You might also like

book

詳解 システム・パフォーマンス 第2版

by Brendan Gregg, 西脇 靖紘, 長尾 高弘

本書は、エンタープライズとクラウド環境を対象としたオペレーティングシステムとアプリケーションのパフォーマンス分析と向上について解説します。 主にLinuxベースのオペレーティングシステムに含まれるツールとその使用例を通じてシステムパフォーマンスを引き出す手法を説明します。システム評価のためのベンチマーク、キャパシティプランニング、ボトルネックの解消について解説しスケーラビリティを制限する要因を発見、分析し、解決する方法を学びます。 第2版では、perf、Ftrace、BPFの解説が加わり、Linuxとクラウドコンピューティングについての説明が充実しました。 システムのパフォーマンスを向上させ、コストを削減し、レイテンシの外れ値を減らすための方法を学ぶ本書はエンジニア必携の一冊です。

book

初めてのGraphQL ―Webサービスを作って学ぶ新世代API

by Eve Porcello, Alex Banks, 尾崎 沙耶, あんどうやすし

今日では多くのWebサービスがRESTアーキテクチャスタイルで実装されています。RESTは2000年にフィールディングの論文で提唱された後に爆発的に普及し洗練されてきました。一方で、本書で紹介するGraphQLは2015年にFacebookによって公開されたRESTとは異なるアプローチのアーキテクチャです。GraphQLの最大の特徴はクエリ言語を用いてデータを操作する点です。クエリ言語の表現力の高さによりクライアントは本当に必要なリクエストを送ることができます。本書ではGraphQLの概要とGraphQLを用いたWebサービスの開発方法を実装例に沿って紹介します。認証やファイルアップロードといった実践的なトピックまで踏み込んだGraphQLの実用的な入門書です。

book

脳に収まるコードの書き方 ―複雑さを避け持続可能にするための経験則とテクニック

by Mark Seemann, 吉羽 龍太郎, 原田 騎郎, Robert C. Martin

ソフトウェアは複雑さを増すばかりですが、人間の脳は限られた複雑さしか扱えません。ソフトウェアが思い通りに動くようするには、脳に収まり、人間が理解できるコードを書く必要があります。 本書は、拡張を続けても行き詰ることなくコードを書き、複雑さを回避するための実践的な方法を解説します。最初のコードを書き始めるところから機能を追加していくところまでを解説し、効率的で持続可能なペースを保ちながら、横断的な問題への対処やトラブルシューティング、最適化を行なう方法を説明します。自分のチェックリストからチームワーク、カプセル化から分解、API設計から単体テストまで、ソフトウエア開発の重要な課題に対する考え方やテクニックを紹介します。サンプルプロジェクトで使うコードは、Gitリポジトリの形で入手でき、試しながら学べます。 有効に機能するプロセスを選び、効果のない方法論から脱却する方法。チェックリストを使うことで、すでに持っているスキルを活用する方法。アプリケーションのバーティカルスライス(ひとつの機能をUIからバックエンドまで一通り実装したもの)を作成しデプロイすることで、分析による停滞から脱却する方法を学びます。さらに、コードの腐敗や不必要な複雑さにつながる要因を避ける方法、コードの振る舞いを変更するためのテクニック、コードの問題を迅速かつ効果的に解決する方法について解説します。

book

Reactハンズオンラーニング 第2版 ―Webアプリケーション開発のベストプラクティス

by Alex Banks, Eve Porcello, 宮崎 空

Facebookが開発したJavaScriptライブラリ「React」の解説書。2013年にオープンソース化されたReactですが、ここ数年で大きな変更が加えられ、またReactを取り巻くエコシステムも大きく変化しました。本書では実際に動くコンポーネントを作りながら、最新のReactの記法について解説しつつ、最新のツールやライブラリも紹介します。初心者から中上級者まで、Reactの今をすばやく学習することができます。