TypeScript

型引数

Tの部分が型引数。型引数は宣言の中だけで有効

type User<A> = {
    name: string;
    Address: A;
}

// 型引数は複数指定することもできる
type Admin<A, P> = {
    Position: P;
    Address: A;
}

extendsによる型引数の制約

extendsの後ろに指定した型が前に指定した型引数の部分型になる

type HasName = {
    name: string;
}

type Cat = {
    //...
}

type Dog = {
    //...
}

type Pet<Cat extends HasName, Dog extends HasName> = {
    cat: Cat;
    dog: Dog;
    // ....
}