From 3eb27d7932581e2df27f11980f245d5230fcb7fe Mon Sep 17 00:00:00 2001 From: Andrei Kovalev <35089047+turtleflyer@users.noreply.github.com> Date: Sun, 4 Apr 2021 20:06:18 -0700 Subject: [PATCH] Fix setInterstate does not infer the type of the parameter in a setter function (schema interface) --- CHANGELOG.md | 6 ++++++ src/UseInterstateTypes.ts | 2 ++ src/test_suites/post/checkTypes.test.ts | 4 ++++ src/test_suites/pre/checkTypes.test.ts | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e2e49e..aba816f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.1.1-alpha.2 (Apr 4, 2021) + +### Fix + +- Fix setInterstate does not infer the type of the parameter in a setter function (schema interface) + ## 0.1.1-alpha.1 (Mar 30, 2021) ### Change diff --git a/src/UseInterstateTypes.ts b/src/UseInterstateTypes.ts index c9ea3e2..d80099e 100644 --- a/src/UseInterstateTypes.ts +++ b/src/UseInterstateTypes.ts @@ -113,6 +113,8 @@ export type SetInterstate = [M] extends [never] >(key: K, set: SetInterstateParam): void; >(set: SetInterstateSchemaParam & EliminateNever): void; + + >(set: SetInterstateSchemaParamFn): void; }; export type SetInterstateParam = Exclude any> | ((prevValue: T) => T); diff --git a/src/test_suites/post/checkTypes.test.ts b/src/test_suites/post/checkTypes.test.ts index e0dd795..fdb84c5 100644 --- a/src/test_suites/post/checkTypes.test.ts +++ b/src/test_suites/post/checkTypes.test.ts @@ -630,6 +630,10 @@ describe('Check types', () => { go: [state.a], })); setInterstateDefined({ a: (x: string) => `${x}new` }); + setInterstateDefined((state) => ({ + 77: undefined, + go: [state.a], + })); // @ts-expect-error setInterstateDefined((state: { a: number }) => ({ diff --git a/src/test_suites/pre/checkTypes.test.ts b/src/test_suites/pre/checkTypes.test.ts index 4b5941b..0ac23e2 100644 --- a/src/test_suites/pre/checkTypes.test.ts +++ b/src/test_suites/pre/checkTypes.test.ts @@ -630,6 +630,10 @@ describe('Check types', () => { go: [state.a], })); setInterstateDefined({ a: (x: string) => `${x}new` }); + setInterstateDefined((state) => ({ + 77: undefined, + go: [state.a], + })); // @ts-expect-error setInterstateDefined((state: { a: number }) => ({