|
| 1 | +import { createEffect, createEvent, createStore } from 'effector'; |
| 2 | +import { expectTypeOf } from 'vitest'; |
| 3 | +import { ExtractWhenPayload } from '../payload'; |
| 4 | + |
| 5 | +const event = createEvent<string>(); |
| 6 | +const $store = createStore<number>(0); |
| 7 | +const effectFx = createEffect<boolean, void>(); |
| 8 | +const effectWithArrayFx = createEffect<string[], void>(); |
| 9 | + |
| 10 | +// --- Single Units --- |
| 11 | + |
| 12 | +expectTypeOf<ExtractWhenPayload<typeof event>>().toEqualTypeOf<string>(); |
| 13 | +expectTypeOf<ExtractWhenPayload<typeof $store>>().toEqualTypeOf<number>(); |
| 14 | +expectTypeOf<ExtractWhenPayload<typeof effectFx>>().toEqualTypeOf<boolean>(); |
| 15 | +expectTypeOf<ExtractWhenPayload<typeof effectWithArrayFx>>().toEqualTypeOf<string[]>(); |
| 16 | + |
| 17 | +// --- Array of Units --- |
| 18 | + |
| 19 | +// Single type array |
| 20 | +expectTypeOf<ExtractWhenPayload<[typeof event]>>().toEqualTypeOf<string>(); |
| 21 | +expectTypeOf<ExtractWhenPayload<[typeof $store]>>().toEqualTypeOf<number>(); |
| 22 | +expectTypeOf<ExtractWhenPayload<[typeof effectFx]>>().toEqualTypeOf<boolean>(); |
| 23 | +expectTypeOf<ExtractWhenPayload<[typeof effectWithArrayFx]>>().toEqualTypeOf<string[]>(); |
| 24 | + |
| 25 | +// Mixed array |
| 26 | +expectTypeOf< |
| 27 | + ExtractWhenPayload<[typeof event, typeof $store, typeof effectFx, typeof effectWithArrayFx]> |
| 28 | +>().toEqualTypeOf<string | number | boolean | string[]>(); |
| 29 | + |
| 30 | +// Mixed array with duplicates |
| 31 | +expectTypeOf<ExtractWhenPayload<[typeof event, typeof event, typeof $store]>>().toEqualTypeOf<string | number>(); |
| 32 | + |
| 33 | +// --- Edge Cases --- |
| 34 | + |
| 35 | +// Empty array should resolve to never |
| 36 | +expectTypeOf<ExtractWhenPayload<[]>>().toBeNever(); |
| 37 | + |
| 38 | +// Non-unit types should resolve to never |
| 39 | +expectTypeOf<ExtractWhenPayload<string>>().toBeNever(); |
| 40 | +expectTypeOf<ExtractWhenPayload<number>>().toBeNever(); |
| 41 | +expectTypeOf<ExtractWhenPayload<null>>().toBeNever(); |
| 42 | +expectTypeOf<ExtractWhenPayload<undefined>>().toBeNever(); |
| 43 | +expectTypeOf<ExtractWhenPayload<{ a: 1 }>>().toBeNever(); |
0 commit comments