当(该属性的)通用参数为never
时,我需要一个通用类型将一个通用属性从指定类型中排除。为此,我使用了Omit
和条件类型。例如,当将通用参数设置为number
时,它的行为与预期的相同,但是当通用类型设置为never
时,该类型解析为never
而不是排除指定的属性( Playground):
type BaseType<T> = {
prop1: string;
genProp1: T;
};
type Excluded<T> = T extends never ? Omit<BaseType<T>,"genProp1"> : BaseType<T>;
const obj1: Excluded<number> = {
genProp1: 5,prop1: "something,something"
};
//obj2 is never
const obj2: Excluded<never> = {
prop1: "dark side" //error: Type 'string' is not assignable to type 'never'
};
为什么要这样做,如何使它返回正确的类型({ prop1: string }
)?
编辑:与null
而不是never
相比,可以解决此问题。我仍然想知道使用never
时发生了什么。