diff --git a/package-lock.json b/package-lock.json index db3a526..24a7963 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@sinclair/typebox", - "version": "0.31.11", + "version": "0.31.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@sinclair/typebox", - "version": "0.31.11", + "version": "0.31.12", "license": "MIT", "devDependencies": { "@sinclair/hammer": "^0.17.1", diff --git a/package.json b/package.json index e3d9b89..db26567 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sinclair/typebox", - "version": "0.31.11", + "version": "0.31.12", "description": "JSONSchema Type Builder with Static Type Resolution for TypeScript", "keywords": [ "typescript", diff --git a/src/typebox.ts b/src/typebox.ts index 78539e4..08318db 100644 --- a/src/typebox.ts +++ b/src/typebox.ts @@ -340,7 +340,8 @@ export interface TDate extends TSchema, DateOptions { export type TEnumRecord = Record export type TEnumValue = string | number export type TEnumKey = string -export type TEnumToLiteralUnion = T extends TEnumValue ? TLiteral : never // Note: Empty enums infer as TLiteral +export type TEnumToLiteralUnion = T extends TEnumValue ? string extends T ? TNever : TLiteral : never +// ^ empty enums evaluate as string export type TEnumToLiteralTuple = UnionToTuple> export type TEnumToUnion = UnionType>> export type TEnum = TEnumToUnion diff --git a/test/static/enum.ts b/test/static/enum.ts index 9818acf..b494728 100644 --- a/test/static/enum.ts +++ b/test/static/enum.ts @@ -33,7 +33,7 @@ import { Type } from '@sinclair/typebox' // expect empty enum to be string (as empty enums T[keyof T] evaluates as string) enum E {} const T = Type.Enum(E) - Expect(T).ToStatic() + Expect(T).ToStaticNever() } { // expect empty enum to be never