diff --git a/deno/lib/types.ts b/deno/lib/types.ts index 59680c296..45b212700 100644 --- a/deno/lib/types.ts +++ b/deno/lib/types.ts @@ -557,8 +557,11 @@ const datetimeRegex = (args: { precision: number | null; offset: boolean }) => { } }; -export class ZodString extends ZodType { - _parse(input: ParseInput): ParseReturnType { +export class ZodString< + Start extends string = string, + End extends string = string +> extends ZodType<`${Start}${string}${End}`, ZodStringDef> { + _parse(input: ParseInput): ParseReturnType { if (this._def.coerce) { input.data = String(input.data); } @@ -794,20 +797,26 @@ export class ZodString extends ZodType { }); } - startsWith(value: string, message?: errorUtil.ErrMessage) { + startsWith( + value: V, + message?: errorUtil.ErrMessage + ): ZodString { return this._addCheck({ kind: "startsWith", value: value, ...errorUtil.errToObj(message), - }); + }) as ZodString; } - endsWith(value: string, message?: errorUtil.ErrMessage) { + endsWith( + value: V, + message?: errorUtil.ErrMessage + ): ZodString { return this._addCheck({ kind: "endsWith", value: value, ...errorUtil.errToObj(message), - }); + }) as ZodString; } min(minLength: number, message?: errorUtil.ErrMessage) { diff --git a/src/types.ts b/src/types.ts index ef27ec585..ac632766e 100644 --- a/src/types.ts +++ b/src/types.ts @@ -557,8 +557,11 @@ const datetimeRegex = (args: { precision: number | null; offset: boolean }) => { } }; -export class ZodString extends ZodType { - _parse(input: ParseInput): ParseReturnType { +export class ZodString< + Start extends string = string, + End extends string = string +> extends ZodType<`${Start}${string}${End}`, ZodStringDef> { + _parse(input: ParseInput): ParseReturnType { if (this._def.coerce) { input.data = String(input.data); } @@ -794,20 +797,26 @@ export class ZodString extends ZodType { }); } - startsWith(value: string, message?: errorUtil.ErrMessage) { + startsWith( + value: V, + message?: errorUtil.ErrMessage + ): ZodString { return this._addCheck({ kind: "startsWith", value: value, ...errorUtil.errToObj(message), - }); + }) as ZodString; } - endsWith(value: string, message?: errorUtil.ErrMessage) { + endsWith( + value: V, + message?: errorUtil.ErrMessage + ): ZodString { return this._addCheck({ kind: "endsWith", value: value, ...errorUtil.errToObj(message), - }); + }) as ZodString; } min(minLength: number, message?: errorUtil.ErrMessage) {