条件类型
typeof multiple extends true
总是
false
这是因为
boolean extends true
和
boolean extends false
也总是假的。看看这个:
type Value1 = typeof multiple extends true ? never : 'YES';
type Value2 = typeof multiple extends false ? never : 'YES';
type Value3 = boolean extends true ? never : 'YES';
type Value4 = boolean extends false ? never : 'YES';
type Check = 'YES' & Value1 & Value2 & Value3 & Value4; // YES
全部
Value1
,
Value2
,
Value3
和
Value4
是类型
'Yes'
这是可以证明的,因为所有这些类型的并集只有一个(字符串文字)类型
“是”
.
您可以使用联合类型修复它
true | false
而不是
boolean
.
type Value<T> = T extends true ? string[] : string;
const func = (
multiple: true | false
) => {
if (multiple) {
const foo: Value<typeof multiple> = ['string']
} else {
const bar: Value<typeof multiple> = 'string'
}
}