⚙️

TypeScriptのPartialを再帰的にするやつ。

2021/09/03に公開

やりたいこと

type T1 = {
    a: {
        a1: string;
	a2: number;
    };
    b: {
        b1: string;
        b2: number;
    }[];
};

type T2: DeepPartial<T1>;

const t2: T2 = {
    a: {
        a2: "1",
    },
    b: [
        {
	    b2: 1
	}
    ],
};

解決

type DeepPartial<T> = {
  [P in keyof T]?: T[P] extends Array<infer U>
    ? Array<DeepPartial<U>>
    : T[P] extends ReadonlyArray<infer UU>
    ? ReadonlyArray<DeepPartial<UU>>
    : DeepPartial<T[P]>;
};

地道にタイプを判定しましょう。

なんかもっとうまく書けるきがするな・・・。

Discussion