diff --git a/index.ts b/index.ts index eedf151..0e78e1d 100644 --- a/index.ts +++ b/index.ts @@ -41,9 +41,9 @@ export function string(value: unknown): string { return value; } -export function stringUnion]>( - variants: readonly [...T], -): Decoder { +export function stringUnion< + const T extends readonly [string, ...Array], +>(variants: T): Decoder { return function stringUnionDecoder(value: unknown): T[number] { const str = string(value); if (!variants.includes(str)) { @@ -312,9 +312,9 @@ export function fieldsUnion>>( } export function tuple>( - mapping: readonly [...{ [P in keyof T]: Decoder }], -): Decoder<[...T]> { - return function tupleDecoder(value: unknown): [...T] { + mapping: [...{ [P in keyof T]: Decoder }], +): Decoder { + return function tupleDecoder(value: unknown): T { const arr = unknownArray(value); if (arr.length !== mapping.length) { throw new DecoderError({ @@ -332,7 +332,7 @@ export function tuple>( throw DecoderError.at(error, index); } } - return result as [...T]; + return result as T; }; } @@ -363,9 +363,9 @@ type MultiTypeName = | "string" | "undefined"; -export function multi]>( - types: readonly [...Types], -): Decoder> { +export function multi< + Types extends readonly [MultiTypeName, ...Array], +>(types: Types): Decoder> { return function multiDecoder(value): Multi { if (value === undefined) { if (types.includes("undefined")) {