Typescript: finnes det et typemap for arrayer
Si at jeg har en liste med boolske verdier:
const a: boolean[] = [true, false, false];
Kan jeg lage en typebetingelse som bare utløses når minst én av booleanene er sann?
Jeg kan gjøre det for tilfellet der de alle er sanne:
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<???> = ???
Men jeg trenger at listen inneholder både true og false, ikke bare en liste full av én type boolean.
Svar #1
Kanskje er dette det du vil ha?
type AnyIsTrue<T extends boolean[]> = T extends false[] ? false : true
type _test0 = AnyIsTrue<[]> // false
type _test1 = AnyIsTrue<[false]> // false
type _test2 = AnyIsTrue<[false, true]> // true
type _test3 = AnyIsTrue<[false, true, false]> // true
Forhåpentligvis gir dette mening: et array av boolske verdier har ingen true-verdier hvis og bare hvis det er en subtype av false[].
Men, som jeg sa i kommentaren, hvis typen til variabelen din er boolean[], kan ikke TypeScript si mye om det. Den vet ikke hvilke verdier som er i arrayen.
type _test4 = AnyIsTrue<boolean[]> // true
