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