From 26886cb8d97ff1673d4e4d27721ba16c40951ec9 Mon Sep 17 00:00:00 2001 From: Mangel Maxime Date: Thu, 25 Jun 2026 21:40:54 +0200 Subject: [PATCH] fix(ts): widen isEnumDefined value parameter to accept any value --- src/fable-library-ts/Reflection.ts | 2 +- tests/Js/Main/EnumTests.fs | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/fable-library-ts/Reflection.ts b/src/fable-library-ts/Reflection.ts index 3b9e55735b..d8f6ef4768 100644 --- a/src/fable-library-ts/Reflection.ts +++ b/src/fable-library-ts/Reflection.ts @@ -389,7 +389,7 @@ export function getEnumName(t: TypeInfo, v: number): string { return getEnumCase(t, v)[0]; } -export function isEnumDefined(t: TypeInfo, v: string | number): boolean { +export function isEnumDefined(t: TypeInfo, v: any): boolean { try { const kv = getEnumCase(t, v); return kv[0] != null && kv[0] !== ""; diff --git a/tests/Js/Main/EnumTests.fs b/tests/Js/Main/EnumTests.fs index a3ea103512..dde24ac0c8 100644 --- a/tests/Js/Main/EnumTests.fs +++ b/tests/Js/Main/EnumTests.fs @@ -30,6 +30,9 @@ module EnumOperations = // must be carried to TypeScript as `<'TEnum extends number>` (otherwise TS2362) let enumToInt<'TEnum when 'TEnum: enum> (value: 'TEnum) : int = int (LanguagePrimitives.EnumToValue value) + + // Unconstrained 'a passed to Enum.IsDefined; the TS output must accept any value (otherwise TS2345) + let isDefinedGeneric<'a> (t: System.Type) (value: 'a) : bool = System.Enum.IsDefined(t, value) // let enumOfValue3 value = LanguagePrimitives.EnumOfValue value // let enumOfValue4 = LanguagePrimitives.EnumOfValue @@ -258,6 +261,11 @@ let tests = Enum.IsDefined(t, 5y) |> equal true Enum.IsDefined(t, 10y) |> equal false + testCase "Enum.IsDefined works in a generic function" <| fun () -> + EnumOperations.isDefinedGeneric typeof "Foo" |> equal true + EnumOperations.isDefinedGeneric typeof 5y |> equal true + EnumOperations.isDefinedGeneric typeof 10y |> equal false + testCase "Enum.Parse works" <| fun () -> let t = typeof Enum.Parse(t, "Foo") |> equal (box MyEnum.Foo)