diff --git a/packages/shared/src/value.test-d.ts b/packages/shared/src/value.test-d.ts index 22e8efd8..03ed27e8 100644 --- a/packages/shared/src/value.test-d.ts +++ b/packages/shared/src/value.test-d.ts @@ -19,4 +19,15 @@ describe('value', () => { expectTypeOf(value(() => Number(42))).toEqualTypeOf>() expectTypeOf(value(async () => Number(42))).toEqualTypeOf>() }) + + it('args', () => { + const v = {} as Value + // @ts-expect-error missing args + value(v) + // @ts-expect-error missing args + value(v, 'hello') + value(v, 'hello', 123) + // @ts-expect-error wrong args + value(v, 'hello', '456') + }) }) diff --git a/packages/shared/src/value.test.ts b/packages/shared/src/value.test.ts index 7ebcf950..d4fbea94 100644 --- a/packages/shared/src/value.test.ts +++ b/packages/shared/src/value.test.ts @@ -5,10 +5,6 @@ it('value', async () => { expect(await value(() => 42)).toBe(42) expect(await value(async () => 42)).toBe(42) - expect(await value(() => ({ - then: (resolve: (value: number) => void) => resolve(42), - }))).toBe(42) - expect(await value(async () => ({ then: (resolve: (value: number) => void) => resolve(42), }))).toBe(42) diff --git a/packages/shared/src/value.ts b/packages/shared/src/value.ts index e8603991..3a19d6de 100644 --- a/packages/shared/src/value.ts +++ b/packages/shared/src/value.ts @@ -2,7 +2,10 @@ import type { Promisable } from 'type-fest' export type Value = T | ((...args: TArgs) => Promisable) -export function value, TArgs extends any[] = []>(value: T, ...args: TArgs): Promise ? U : never> { +export function value( + value: Value, + ...args: NoInfer +): Promise ? U : never> { if (typeof value === 'function') { return (value as any)(...args) }