diff --git a/src/common/make-enum.ts b/src/common/make-enum.ts index 6f939080ec..637d6c8b58 100644 --- a/src/common/make-enum.ts +++ b/src/common/make-enum.ts @@ -12,13 +12,18 @@ export type MadeEnum< Values extends string, ValueDeclaration = EnumValueDeclarationShape, Extra = unknown, -> = { - readonly [Value in Values & string]: Value; -} & EnumHelpers< +> = EnumHelpers< Values, ValueDeclaration & ImplicitValueDeclarationShape > & - Readonly; + Readonly & + // Allow direct access to the values if they're strict. + // For generic `string` we don't allow this. + // This allows strict values to be compatible with generic values. + // MadeEnum = MadeEnum + (string extends Values + ? unknown // ignore addition + : { readonly [Value in Values & string]: Value }); interface EnumOptions< ValueDeclaration extends EnumValueDeclarationShape, @@ -217,7 +222,7 @@ type NormalizedValueDeclaration = interface EnumHelpers { readonly values: ReadonlySet; readonly entries: ReadonlyArray>; - readonly entry: (value: Values) => Readonly; + readonly entry: (value: V) => Readonly; readonly has: ( value: In & {}, ) => value is In & Values & {};