👌
TypescriptのExtractでオブジェクトユニオンから1個とりだす
type: a
の型だけ抜き出したい。
ユニオンから Extractでできます。
type Payload = {
type: 'a',
data: number;
} | {
type: 'b',
data: string;
};
type PayloadA = Extract<Payload, {type: 'a'}>; // <- ここ
コード部分では、こう。
// no error
const payloadA1: PayloadA = {
type: "a"
data: 100
};
// error
const payloadA2: PayloadA = {
type: "b"
data: '100'
};
独自実装しようとしてだめだった実装
Extractでできるってことを知らなかった時代に書いたやつ。
type ExtractByKey<
Base extends Record<string, any>,
Key extends keyof Base,
Value extends Base[Key]
> = Base[Key] extends Value ? Base : never;
参考
参考というか答えが書いてある。
Discussion