ホームに戻る

TypeScriptコース

型安全なJavaScript開発を実現するTypeScriptを学びましょう

初級

無料で学習可能

初級基本
問題1: 基本的な型定義
TypeScriptの基本的な型定義を学びます。JavaScriptに型システムを追加することで、開発時にエラーを早期発見でき、コードの品質と保守性が向上します。string、number、booleanという3つの基本型(プリミティブ型)は、TypeScriptプログラミングの基礎となる重要な概念です。
初級基本
問題2: 配列の型注釈
TypeScriptで配列の型を定義する方法を学びます。配列の型注釈には、要素の型[]という簡潔な構文と、Array'<'要素の型'>'というジェネリック構文の2つの方法があります。TypeScriptでは配列の要素がすべて同じ型であることを保証でき、型安全な配列操作により実行時エラーを削減できます。
初級基本
問題3: オブジェクトの型注釈
TypeScriptでオブジェクトの型を定義する方法を学びます。オブジェクトの型注釈では、各プロパティの名前と型を指定します。これにより、存在しないプロパティへのアクセスや間違った型の値の代入を防げます。大規模なアプリケーション開発において、APIレスポンスやデータモデルの型安全性を保証する重要な機能です。
初級基本
問題4: 関数の型注釈
関数のパラメータと戻り値に型を付ける方法を学びます。パラメータの型と戻り値の型を明示的に指定することで、関数の使用方法を明確にします。
初級基本
問題5: オプショナルプロパティ
オプショナルプロパティの定義方法を学びます。?を使うことで、プロパティを省略可能にでき、柔軟なオブジェクト構造を定義できます。
初級基本
問題6: Union型
Union型を使って、変数が複数の型のいずれかを受け入れることができるようにする方法を学びます。パイプ(|)を使って型を組み合わせます。
初級基本
問題7: 交差型(Intersection Types)
交差型を使って、複数の型を組み合わせて新しい型を作成する方法を学びます。&演算子を使って型を結合します。
初級基本
問題8: 型エイリアス
typeキーワードを使って型エイリアスを定義する方法を学びます。型エイリアスを使うと、複雑な型に名前を付けて再利用できます。
初級基本
問題9: インターフェース定義
interfaceキーワードを使ってインターフェースを定義する方法を学びます。インターフェースはオブジェクトの構造を定義し、継承も可能です。
初級基本
問題10: リテラル型
リテラル型を使って、特定の値のみを受け入れる型を定義する方法を学びます。文字列、数値、真偽値のリテラルを組み合わせます。
初級特殊な型
問題11: any型とunknown型
any型とunknown型の違いを学びます。any型は型チェックを無効化しますが、unknown型は型安全性を保ちながら任意の値を受け入れます。サードパーティAPIや動的なデータを扱う際に、unknown型を使うことでより安全なコードを書けます。
初級特殊な型
問題12: void型
void型を使って、戻り値を返さない関数を定義する方法を学びます。主にconsole.logを呼ぶ関数やイベントハンドラなど、副作用のみを目的とした関数で使用されます。戻り値がないことを明示的に示します。
初級特殊な型
問題13: never型
never型を使って、決して終了しない関数や到達不可能なコードを表現する方法を学びます。例外をスローする関数や無限ループ、switch文の網羅性チェックで使用されます。コンパイラがコードの完全性を検証できます。
初級特殊な型
問題14: 型アサーション
asキーワードを使って型アサーションを行う方法を学びます。コンパイラに対してより具体的な型情報を伝えることができます。DOM要素のアクセスや、unknown型からの変換で頻繁に使用されますが、注意深く使う必要があります。
初級特殊な型
問題15: constアサーション
as constを使って、リテラル型を作成する方法を学びます。値を読み取り専用にし、より厳密な型を生成します。設定オブジェクトや定数の定義、タプルの作成などで活用され、コードの意図を明確にします。
初級特殊な型
問題16: Enum(列挙型)
enumキーワードを使って列挙型を定義する方法を学びます。名前付き定数のセットを作成でき、関連する定数をグループ化してコードの可読性を向上させます。数値enumと文字列enumの両方をサポートします。
初級特殊な型
問題17: タプル型
タプル型を使って、固定長の配列で各要素の型が異なるデータ構造を定義する方法を学びます。関数の複数戻り値や、座標データなど、順序と位置が重要なデータを型安全に扱えます。
初級特殊な型
問題18: readonly
readonly修飾子を使って、プロパティや配列を読み取り専用にする方法を学びます。データの不変性を保証し、予期しない変更を防ぐことで、より安全なコードを書けます。関数型プログラミングの原則に沿った設計が可能です。
初級関数の型
問題19: 関数型
関数の型を定義する方法を学びます。パラメータと戻り値の型を明示的に記述し、型エイリアスとして再利用できるようにします。コールバック関数や高階関数の型定義において特に有用で、関数の受け渡しを型安全にします。
初級関数の型
問題20: オプショナルパラメータ
関数のパラメータをオプショナルにする方法を学びます。?を使ってパラメータを省略可能にでき、柔軟な関数インターフェースを作成できます。オプション設定や拡張機能の実装に便利です。
初級関数の型
問題21: デフォルトパラメータの型
デフォルト値を持つパラメータの型定義を学びます。デフォルト値から型推論されますが、明示的な型注釈も可能です。オプショナルパラメータとは異なり、引数が省略された場合にデフォルト値が使用されます。
初級関数の型
問題22: Restパラメータの型
可変長引数(Restパラメータ)の型定義を学びます。...演算子を使って任意の数の引数を配列として受け取ります。合計計算やリスト処理など、事前に引数の数がわからない場合に便利です。
初級関数の型
問題23: 関数オーバーロード
関数オーバーロードを使って、同じ関数名で異なるシグネチャを定義する方法を学びます。引数の型に応じて異なる戻り値の型を定義でき、より表現力豊かなAPIを作成できます。jQueryなどのライブラリでも活用されています。

中級

無料で学習可能

中級ジェネリクス
問題24: ジェネリクス基礎
ジェネリクスの基本的な使い方を学びます。'<'T'>'構文を使って、様々な型に対応できる汎用的な型を作成できます。型の再利用性を高め、コードの重複を削減しながら型安全性を保つことができます。コレクションやユーティリティ関数の実装に必須の機能です。
中級ジェネリクス
問題25: ジェネリック関数
関数でジェネリクスを使用する方法を学びます。関数名の後に'<'T'>'を付けることで、型パラメータを受け取る関数を定義できます。同じロジックを異なる型に対して適用でき、型推論により使いやすいAPIを提供できます。
中級ジェネリクス
問題26: ジェネリックインターフェース
インターフェースでジェネリクスを使用する方法を学びます。Interface'<'T'>'の形式で、型パラメータを持つインターフェースを定義できます。コンテナやコレクションのインターフェース定義に便利で、型安全なデータ構造を作成できます。
中級ジェネリクス
問題27: ジェネリック制約
ジェネリックに制約を付ける方法を学びます。T extends Baseの形式で、受け入れる型を制限できます。特定のプロパティやメソッドを持つ型のみを受け入れるようにし、より意味のある型安全なコードを書けます。
中級ジェネリクス
問題28: デフォルトジェネリクス
ジェネリックにデフォルト型を設定する方法を学びます。'<'T = string'>'の形式で、型パラメータが省略された場合のデフォルト型を指定できます。使いやすいAPIを作成でき、一般的なユースケースを簡単に扱えるようになります。
中級ジェネリクス
問題29: 複数のジェネリックパラメータ
複数のジェネリックパラメータを使用する方法を学びます。'<'T, U'>'のようにカンマで区切って複数の型パラメータを定義できます。異なる型の組み合わせを扱うコードで、より柔軟で表現力豊かな型定義が可能になります。
中級ジェネリクス
問題30: ジェネリッククラス
クラスでジェネリクスを使用する方法を学びます。class Name'<'T'>'の形式で、型パラメータを持つクラスを定義できます。スタック、キュー、リストなどのデータ構造の実装に便利で、型安全なコレクションクラスを作成できます。
中級高度な型
問題31: Partial'<'T'>'
Partial'<'T'>'ユーティリティ型を使って、すべてのプロパティをオプショナルにする方法を学びます。これにより、オブジェクトの部分的な更新を型安全に実装できます。既存の型から柔軟な更新用の型を作成できます。
中級高度な型
問題32: Required'<'T'>'
Required'<'T'>'ユーティリティ型を使って、すべてのオプショナルプロパティを必須にする方法を学びます。オプショナルなプロパティを持つ型から、すべてのプロパティが必須の型を作成できます。
中級高度な型
問題33: Readonly'<'T'>'
Readonly'<'T'>'ユーティリティ型を使って、すべてのプロパティを読み取り専用にする方法を学びます。イミュータブルなデータ構造を作成し、意図しない変更を防ぐことができます。
中級高度な型
問題34: Pick'<'T, K'>'
Pick'<'T, K'>'ユーティリティ型を使って、型から特定のプロパティだけを選択する方法を学びます。大きなインターフェースから必要な部分だけを抽出して新しい型を作成できます。
中級高度な型
問題35: Omit'<'T, K'>'
Omit'<'T, K'>'ユーティリティ型を使って、型から特定のプロパティを除外する方法を学びます。センシティブな情報や内部的なプロパティを除外した型を作成できます。
中級高度な型
問題36: Record'<'K, T'>'
Record'<'K, T'>'ユーティリティ型を使って、キーと値の型を指定してオブジェクト型を作成する方法を学びます。辞書型やマップ型のデータ構造を型安全に定義できます。
中級高度な型
問題37: Exclude'<'T, U'>'
Exclude'<'T, U'>'ユーティリティ型を使って、Union型から特定の型を除外する方法を学びます。条件に合わない型を取り除いて、より具体的な型を作成できます。
中級高度な型
問題38: Extract'<'T, U'>'
Extract'<'T, U'>'ユーティリティ型を使って、Union型から特定の型だけを抽出する方法を学びます。条件に合う型だけを選択して新しい型を作成できます。
中級高度な型
問題39: NonNullable'<'T'>'
NonNullable'<'T'>'ユーティリティ型を使って、型からnullとundefinedを除外する方法を学びます。nullやundefinedを許可しない厳密な型を作成できます。
中級高度な型
問題40: Awaited'<'T'>'
Awaited'<'T'>'ユーティリティ型を使って、Promise型から内部の型を取得する方法を学びます。非同期処理の結果の型を扱う際に便利です。ネストしたPromiseも再帰的に展開されます。
中級高度な型
問題41: ReturnType'<'T'>'
ReturnType'<'T'>'ユーティリティ型を使って、関数型から戻り値の型を取得する方法を学びます。関数の戻り値の型を再利用したい場合や、ライブラリの関数の戻り値の型を取得したい場合に便利です。型の抽出により、コードの重複を避けることができます。
中級高度な型
問題42: Parameters'<'T'>'
Parameters'<'T'>'ユーティリティ型を使って、関数型からパラメータの型をタプル型として取得する方法を学びます。関数の引数を別の関数に転送する場合や、引数の型を再利用したい場合に活用できます。
中級高度な型
問題43: InstanceType'<'T'>'
InstanceType'<'T'>'ユーティリティ型を使って、コンストラクタ関数型からインスタンスの型を取得する方法を学びます。クラスのインスタンス型を明示的に定義したい場合や、ファクトリー関数の戻り値の型を定義する際に有用です。
中級高度な型
問題44: keyof演算子
keyof演算子を使って、オブジェクト型のすべてのキーをUnion型として取得する方法を学びます。動的なプロパティアクセスを型安全に行う場合や、オブジェクトのキーに基づいた処理を実装する際に不可欠です。
中級高度な型
問題45: typeof演算子
typeof演算子を使って、JavaScript値から型を取得する方法を学びます。既存の値から型を生成することで、手動で型定義を書く必要がなくなり、実装と型定義の同期を保つことができます。
中級高度な型
問題46: インデックスアクセス型
インデックスアクセス型(T[K])を使って、オブジェクト型の特定のプロパティの型を取得する方法を学びます。ネストしたオブジェクトの深い階層の型を取得する場合や、特定のプロパティの型を再利用する際に便利です。
中級高度な型
問題47: 条件型
条件型(T extends U ? X : Y)を使って、型レベルで条件分岐を行う方法を学びます。型の特性に基づいて異なる型を返すことができ、より柔軟で表現力豊かな型定義が可能になります。
中級高度な型
問題48: inferキーワード
条件型の中でinferキーワードを使って、型を推論し抽出する方法を学びます。複雑な型から特定の部分を取り出す際に強力なツールとなります。ジェネリック型の内部の型を取得する場合などに活用できます。

上級

無料で学習可能

上級高度な型
問題49: Template Literal型
Template Literal型を使って、文字列リテラルを動的に生成する方法を学びます。JavaScriptのテンプレートリテラル構文を型レベルで使用することで、文字列パターンを型として定義できます。型安全なイベントハンドラ名やIDパターンの定義に活用できます。
上級高度な型
問題50: Mapped型
Mapped型を使って、既存の型から新しい型を生成する方法を学びます。オブジェクトのすべてのプロパティに対して統一的な変換を適用できます。readonlyやoptionalの追加・削除など、型の修飾子を操作する基本を習得します。
上級高度な型
問題51: 型ガード関数
is演算子を使って、型ガード関数を定義する方法を学びます。実行時の値チェックと型の絞り込みを連携させることで、より安全なコードを書くことができます。カスタム型ガードを作成し、複雑な型判定を実装できるようになります。
上級高度な型
問題52: 型の絞り込み
typeofやin演算子を使った型の絞り込みについて学びます。TypeScriptのコントロールフロー解析を活用して、条件分岐内で自動的に型を絞り込む方法を習得します。Union型を扱う際の基本的なパターンを理解します。
上級高度な型
問題53: Discriminated Unions
タグ付きUnion(Discriminated Unions)を使って、異なる型を安全に判別する方法を学びます。共通のプロパティ(判別子)を使うことで、型の絞り込みを確実に行えます。エラーハンドリングや状態管理で頻繁に使用される重要なパターンです。
上級高度な型
問題54: インデックスシグネチャ
インデックスシグネチャを使って、動的なプロパティ名を持つオブジェクトの型を定義する方法を学びます。辞書型やマップ型のデータ構造を表現する際に不可欠な機能です。既知のプロパティとの組み合わせ方も習得します。
上級高度な型
問題55: 再帰的な型定義
再帰的な型定義を使って、ネストした構造を表現する方法を学びます。JSONのような階層的なデータ構造やツリー構造を型として定義できます。型が自己参照することで、任意の深さのネストを表現できるようになります。
上級高度な型
問題56: 条件型の分配
条件型がUnion型に対してどのように分配されるかを学びます。分配則を理解することで、より高度な型操作が可能になります。分配を防ぐ方法も含め、条件型の動作を完全に制御できるようになります。
上級高度な型
問題57: Mapped型の修飾子
Mapped型で+/-修飾子を使って、readonlyやoptionalを追加・削除する方法を学びます。既存の型から修飾子を取り除いたり、追加したりすることで、柔軟な型変換が可能になります。型の可変性を制御する高度なテクニックです。
上級高度な型
問題58: satisfies演算子
satisfies演算子を使って、型の妥当性を検証しながら型推論を保持する方法を学びます。型注釈とは異なり、より具体的な型情報を保ちながら、期待する型に適合することを保証できます。TypeScript 4.9で導入された強力な機能です。
上級高度な型
問題59: const Type Parameters
const type parametersを使って、ジェネリック型パラメータをより狭い型として推論する方法を学びます。配列やオブジェクトリテラルの型をより正確に保持できます。TypeScript 5.0で導入された、型推論を改善する機能です。
上級高度な型
問題60: Variadic Tuple Types
可変長タプル型を使って、任意の長さのタプルを扱う方法を学びます。スプレッド構文を型レベルで使用することで、タプルの連結や分解を型安全に行えます。関数の引数や戻り値の型をより柔軟に定義できる高度な機能です。