From 1886c52ecedc95088c78b55b73d8ff951fcd95ae Mon Sep 17 00:00:00 2001 From: Pablo Baleztena Date: Tue, 15 Oct 2024 07:59:35 -0300 Subject: [PATCH] [fabric/core] Enhance VariantMatcher to support return type parameterization in match function --- packages/fabric/core/src/variant/match.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/fabric/core/src/variant/match.ts b/packages/fabric/core/src/variant/match.ts index e4f6932..5d14799 100644 --- a/packages/fabric/core/src/variant/match.ts +++ b/packages/fabric/core/src/variant/match.ts @@ -1,17 +1,21 @@ import { Fn } from "../types/fn.js"; import { TaggedVariant, VariantFromTag, VariantTag } from "./variant.js"; -export type VariantMatcher> = { - [K in TVariant[VariantTag]]: Fn>; +export type VariantMatcher, T> = { + [K in TVariant[VariantTag]]: Fn, T>; }; export function match>( v: TVariant, ) { return { - case>( - cases: TMatcher, - ): ReturnType { + case< + const TReturnType, + const TMatcher extends VariantMatcher< + TVariant, + TReturnType + > = VariantMatcher, + >(cases: TMatcher): TReturnType { if (!(v[VariantTag] in cases)) { throw new Error("Non-exhaustive pattern match"); }