From d84fc7929443fc0ac7903ab8bca09554701c5ffe Mon Sep 17 00:00:00 2001 From: unnoq Date: Sun, 16 Feb 2025 17:19:44 +0700 Subject: [PATCH] refactor(shared): value utility Fix: it not warning when passing invalid args or missing args --- packages/shared/src/value.test-d.ts | 11 +++++++++++ packages/shared/src/value.test.ts | 4 ---- packages/shared/src/value.ts | 5 ++++- 3 files changed, 15 insertions(+), 5 deletions(-) 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) }