我有一个泛型类型,它允许对象中的任一属性为undefined
,但不能同时为undefined
:
type RequireOne<T> =
| {
a: NonNullable<T>
b: NonNullable<T>
}
| {
a: NonNullable<T>
b: undefined
}
| {
a: undefined
b: NonNullable<T>
}
现在,如果我在声明函数时使用此类型,它可以很好地处理具体类型:
const test1 = ({ a, b }: RequireOne<string>): string => a ?? b
但是,如果我也try 使相同的函数泛型,则会失败:
const test2 = <T>({ a, b }: RequireOne<T>): T => a ?? b
// ERROR: Type 'NonNullable<T> | undefined' is not assignable to type 'T'.
这是Typescript 的预期行为吗?如果是,为什么?