给定:
export type MapToInput<T> = {
[K in keyof T]: T[K] extends firestore.Timestamp | undefined | null
? firestore.Timestamp | Date
: T[K];
};
何时:
interface Boop {
a: undefined;
}
type x = MapToInput<Boop>;
我想:x.a
不是firestore.Timestamp | Date
。有没有办法在上面的类型中说
我想匹配:
firestore.Timestamp
或firestore.Timestamp | undefined
或firestore.Timestamp | null
或firestore.Timestamp | undefined | null
但不是:
undefined
或undefened | null
或null
罚款:
interface Beep {
a: firestore.Timestamp;
}
type y = MapToInput<Beep>;
罚款:
interface Blab {
a?: firestore.Timestamp;
}
type z = MapToInput<Blab>;
2条答案
按热度按时间t30tvxxf1#
如果我正确地理解了类型的意图,那么如果
firestore.Timestamp
已经存在于属性类型中,则添加Date
。我认为最简洁的解决方案是使用一个分配条件类型来添加联合体的额外组成元素,使用分配条件类型,我们可以考虑联合体的每个组成元素,如果它是
Timestamp
,则添加Date
,如果不是,则保持不变,这样,我们就可以完全避免null
和undefined
组合的问题:Playground链接
utugiqy62#
排除你不想要的类型并选择never。这将导致你想要的行为