假设我有一个布尔值列表:
const a: boolean[] = [true, false, false];
我能否创建一个只有在至少有一个布尔值为真时才触发的条件类型?
当所有布尔值都为真时,可以这样做:
type BList = true[] | false[];
type AreAllTrue<T extends BList> = T[number] extends true ? true : false;
const a: BList = [true, true, true];
const b: AreAllTrue<typeof a> = true; // This compiles
const c: AreAllTrue<typeof a> = false; // This doesn't (as expected)
// type AnyAreTrue<???> = ???
但是我需要列表中既有 true 又有 false,而不仅仅是一个类型的布尔值。
const a: [true, true, false] = [true, true false]
吗?因为如果这个“类型”实际上是一个boolean[]
数组的话,TypeScript并不知道它内部的情况。 - decorator-factoryconst a = [true, true, false] as const
,但如果你有一个boolean[]
数组,那么绝对没有任何编译时的操作。 - tokland