型の継承に関してパターンが多くてわかりずらい。。
表にして理解を深めようと思います。
クラスに関する型の適用と継承
状況 |
キーワード |
重要度 |
使用例 |
説明 |
クラスの型定義 |
class |
★★★★★ |
class MyClass {} |
クラスの定義 |
クラスの継承 |
extends |
★★★★★ |
class MyExtendedClass extends MyClass {} |
他のクラスを継承して新しいクラスを作成 |
クラスの型適用 |
implements |
★★★★☆ |
class MyClass implements MyInterface {} |
クラスにインターフェースの型を適用 |
抽象クラス |
abstract |
★★★★☆ |
abstract class AbstractClass {} |
インスタンス化できないクラス |
ミックスイン |
- |
★★★☆☆ |
class MyClass extends Mixin(OtherClass) {} |
複数のクラスからメソッドを取り込むためのパターン |
インターフェースに関する型の適用と継承
状況 |
キーワード |
重要度 |
使用例 |
説明 |
インターフェースの定義 |
interface |
★★★★★ |
interface MyInterface {} |
インターフェースの定義 |
インターフェースの継承 |
extends |
★★★★☆ |
interface MyExtendedInterface extends MyInterface {} |
他のインターフェースを継承して新しいインターフェースを作成 |
インターフェースの拡張 |
extends |
★★★★☆ |
interface MyInterface extends OtherInterface1, OtherInterface2 {} |
複数のインターフェースを拡張して新しいインターフェースを作成 |
type に関する型の適用と結合
状況 |
キーワード |
重要度 |
使用例 |
説明 |
型エイリアスの定義 |
type |
★★★★★ |
type MyType = { a: string, b: number }; |
特定の型に名前を付ける |
型の合成 |
& |
★★★★☆ |
type Combined = TypeA & TypeB; |
複数の型を合成して新しい型を作成 |
ユニオン型 |
` |
` |
★★★★☆ |
`type MyUnion = TypeA |
条件付き型 |
- |
★★★☆☆ |
type Conditional<T> = T extends X ? TypeA : TypeB; |
条件に基づいて型を選択 |
マップドタイプ |
- |
★★★☆☆ |
type Mapped<Type> = { [Property in keyof Type]: NewType }; |
オブジェクトの各プロパティに対して型を適用 |
型の抽出 |
- |
★★★☆☆ |
type Extracted = MyType['property']; |
オブジェクト型からプロパティの型を抽出 |
高度な使用例
状況 |
キーワード |
重要度 |
使用例 |
説明 |
ジェネリック型 |
- |
★★★★☆ |
function identity<T>(arg: T): T { return arg; } |
汎用的な型を提供 |
ユニオン型 |
` |
` |
★★★★☆ |
`type MyType = string |
キーの抽出 |
keyof |
★★★☆☆ |
type MyKeys = keyof MyObject; |
オブジェクトのキーを抽出 |
タプル型 |
- |
★★★☆☆ |
type MyTuple = [string, number]; |
固定された長さの配列とその要素の型 |
ユーティリティ型 |
- |
★★★☆☆ |
type MyReadonly = Readonly<{ a: number, b: string }>; |
標準で提供される便利な型操作 |
インターセクション型 |
& |
★★★☆☆ |
type MyType = A & B; |
複数の型のプロパティをすべて持つ型 |
テンプレートリテラル型 |
- |
★★★☆☆ |
type World = "world"; type Greeting = hello ${World}; |
文字列リテラル型の組み合わせ |
条件付き型 |
- |
★★★☆☆ |
type IsString<T> = T extends string ? true : false; |
型に基づいた条件分岐 |
マップドタイプ |
- |
★★★☆☆ |
type Optional<T> = { [K in keyof T]?: T[K] }; |
オブジェクトの各プロパティを操作 |
型の抽出 |
- |
★★★☆☆ |
type MyType = MyObject['myKey']; |
オブジェクトのプロパティの型を抽出 |
型のフィルタリング |
- |
★★★☆☆ |
type NonFunctionProps<T> = { [K in keyof T]: T[K] extends Function ? never : T[K] }; |
特定の型を除外 |