|
| 1 | +import {expectType} from 'tsd'; |
| 2 | +import type {OrAll} from '../source/or-all.d.ts'; |
| 3 | + |
| 4 | +declare const boolean: boolean; |
| 5 | + |
| 6 | +// Basic boolean combinations |
| 7 | +expectType<OrAll<[true, false]>>(true); |
| 8 | +expectType<OrAll<[false, true]>>(true); |
| 9 | +expectType<OrAll<[true, true]>>(true); |
| 10 | +expectType<OrAll<[false, false]>>(false); |
| 11 | + |
| 12 | +// Multiple elements in a tuple |
| 13 | +expectType<OrAll<[false, false, false, true]>>(true); |
| 14 | +expectType<OrAll<[false, false, false, false]>>(false); |
| 15 | + |
| 16 | +// `boolean` element |
| 17 | +expectType<OrAll<[false, false, boolean]>>(boolean); |
| 18 | +expectType<OrAll<[false, boolean, true]>>(true); |
| 19 | +expectType<OrAll<[boolean, boolean, boolean]>>(boolean); |
| 20 | + |
| 21 | +// Unions |
| 22 | +expectType<OrAll<[false, false, true] | [false, false, false]>>(boolean); // `true` | `false` |
| 23 | +expectType<OrAll<[false, true, false] | [true]>>(true); // `true` | `true` |
| 24 | +expectType<OrAll<[false] | [false, false, false]>>(false); // `false` | `false` |
| 25 | +expectType<OrAll<[true, false] | [false, boolean]>>(boolean); // `true` | `boolean` |
| 26 | +expectType<OrAll<[false, false] | [false, false, boolean]>>(boolean); // `false` | `boolean` |
| 27 | +expectType<OrAll<[boolean, false, false] | [boolean]>>(boolean); // `boolean` | `boolean` |
| 28 | + |
| 29 | +// Tuples with rest element |
| 30 | +expectType<OrAll<[false, ...Array<false>]>>(false); |
| 31 | +expectType<OrAll<[...Array<false>, true]>>(true); |
| 32 | +expectType<OrAll<[false, ...Array<false>, boolean]>>(boolean); |
| 33 | + |
| 34 | +// Non-tuple arrays |
| 35 | +expectType<OrAll<Array<true>>>(true); |
| 36 | +expectType<OrAll<Array<false>>>(false); |
| 37 | +expectType<OrAll<boolean[]>>(boolean); |
| 38 | + |
| 39 | +// Readonly arrays |
| 40 | +expectType<OrAll<readonly [true, false, true]>>(true); |
| 41 | +expectType<OrAll<readonly [false, false, false]>>(false); |
| 42 | +expectType<OrAll<readonly [false, false, boolean]>>(boolean); |
| 43 | +expectType<OrAll<ReadonlyArray<true>>>(true); |
| 44 | +expectType<OrAll<ReadonlyArray<false>>>(false); |
| 45 | +expectType<OrAll<readonly boolean[]>>(boolean); |
| 46 | + |
| 47 | +// Boundary cases |
| 48 | +expectType<OrAll<[]>>(false); |
| 49 | + |
| 50 | +expectType<OrAll<[any, any, false]>>(boolean); |
| 51 | +expectType<OrAll<[any, any, true]>>(true); |
| 52 | +expectType<OrAll<[any, any, any]>>(boolean); |
| 53 | + |
| 54 | +expectType<OrAll<[never, never, false]>>(false); |
| 55 | +expectType<OrAll<[never, never, true]>>(true); |
| 56 | +expectType<OrAll<[never, never, never]>>(false); |
| 57 | + |
| 58 | +// Errors with non-boolean or optional elements |
| 59 | +// @ts-expect-error |
| 60 | +type Error1 = OrAll<[1, 0]>; |
| 61 | +// @ts-expect-error |
| 62 | +type Error2 = OrAll<[true, false?]>; |
0 commit comments