Programming Self-Study Notebook

勉強したことを忘れないように! 思い出せるように!!

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;
// }

まだまだありそうですが、ここまでにしておきます。