TypeScriptで使用する型について、ちょっと応用
TypeScriptの勉強を開始したばかりのビギナーです。
TypeScriptを使用するなら、「最初に型
を抑えておくべき」と思い、型の種類を調べてみました。
- 基本については以下にまとめてみました。
応用
型エイリアス
- 任意の型に別名をつけることができます。
- 対象となる型はさまざま。
- プリミティブ型
- リテラル型
- 関数型
- union型
- intersection型
type UserId = string; type AuthProvider = 'facebook' | 'twitter' | 'github'; type UserInfo = { id: UserId; provider: AuthProvider; }; type UserResolver = (id: UserId) => UserInfo;
ジェネリクス
- 抽象化された型を使うための機能
function extend<T, U>(first: T, second: U): T & U { return{ ...first, ...second}; } interface Foo { foo:number; } interface Bar { bar:number; } const obj = extend<Foo,Bar>({foo: 1},{bar: 2});
- 上記例は
extend関数
が引数の二つのオブジェクトをシャローマージして、新しいオブジェクトを返す実装です。
タイプガード
- 条件分岐を利用して型の絞り込みを実施する。
- typeof
- in
- instanceof
function getSize(value: string | number){ if(typeof value === 'string'){ return value.length; }; return value; }
型アサーション
- コンパイラが推論した結果を、ほかの型で上書きする機能
- 上書き後の型が元の型の構造に完全に包含されている場合のみ利用可能
const message: any = 'Hello World'; const length: number = (message as string).length;
const message: any = 'Hello World'; const length: number = (<string>message).length;
ユーティリティタイプ
interface Config { timeout: number; debug: boolean; } type NormalizedConfig = Required<Config>; // 以下と同等 // type NormalizedConfig = { // timeout: number; // debug: boolean; // }
まだまだありそうですが、ここまでにしておきます。