投稿数 585
公開から 2940

【TypeScript】Utility Types読んでみた。


Categories: typescript

概要

ざっと見てみる。 感想書いてみる。

Partial

いいね! 使える。

Readonly

いいね! 使える。

Record<K,T>

いいね!

使える。

Pick<T,K>

まぁまぁ。

Omit<T,K>

Omitってなんだっけ。・・・省略でした。

Extract<T,U>

抽出にするパターン。

NonNullable

Objectからundefinedとnull…つまり未定義のものを削除して有効なものだけを取得するパターン。 結構使えそう、

Parameters

関数型Tのパラメーターの型のタプル型を構築します。 わからない。。 …わかった。 関数の引数のParametersだけを取得したい場合ね。

type T1 = Parameters<(s: string) => void>;  // [string]
type T1 = Parameters<(s: string, n: number) => void>;  // [string, number]

ConstructorParameters

Parametersのコンストラクター版。

ReturnType

関数から返り値の型だけを抽出する場合。

InstanceType

インスタンス時のタイプ? いまいち使いどころがわからん。。

Required

のタイプのnullableのところを全部Requiredにします。 いいね。これは使えそう。

ThisParameterType

thisのパラメータを取得するみたい。 う〜ん。。

OmitThisParameter

よくわからない。

ThisType

マーカーをつけるだけ。 言い換えると型の矯正をするだけ。 …複雑ですね。。

要はthisの内容を強制することができる、ッテ感じみたい。

    type ObjectDescriptor<D, M> = {
    data?: D;
    methods?: M & ThisType<D & M>;  // Type of 'this' in methods is D & M
}

function makeObject<D, M>(desc: ObjectDescriptor<D, M>): D & M {
    let data: object = desc.data || {};
    let methods: object = desc.methods || {};
    return { ...data, ...methods } as D & M;
}

let obj = makeObject({
    data: { x: 0, y: 0 },
    methods: {
        moveBy(dx: number, dy: number) {
            this.x += dx;  // Strongly typed this
            this.y += dy;  // Strongly typed this
        }
    }
});

参考

https://www.typescriptlang.org/docs/handbook/utility-types.html#readonlyt