From a9f13b737ba89f79409f12f0678b07d34b974ab1 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sat, 8 Jan 2022 19:31:29 +0530 Subject: fix: fixes pattern matching type --- src/utils.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/utils.ts') diff --git a/src/utils.ts b/src/utils.ts index 8e3abb9..15d5fb0 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -3,10 +3,13 @@ export const eq = (b: T): boolean => a === b +type TagValue = T extends Tag ? V : never; + export const match = - (pattern: { [key in K | '_']: () => R }) => - (k: K): R => - (pattern[k] || pattern._)() + > + (pattern: { [key in T['tag'] | '_']?: (v: TagValue) => R }) => + (tag: T): R => + (pattern[tag.tag] || pattern._ as any)(tag.value) type Tag = { tag: N; value: V } export type Union = { [N in keyof T]: Tag }[keyof T] -- cgit v1.3.1