From 3adfafbd7dfa2f289000caa93beb09f1f4c7ddfe Mon Sep 17 00:00:00 2001 From: Jay Fong Date: Fri, 12 Jun 2020 19:52:48 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=96=20Merge=20PR=20#45428=20[yup]=20Ex?= =?UTF-8?q?port=20Locale=20interfaces=20for=20augmentation=20by=20@fjc0k?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [yup] Export Locale interfaces for augmentation * [yup] Update maintainer * [yup] Export BasicArraySchema --- types/yup/index.d.ts | 15 ++++++++------- types/yup/yup-tests.ts | 29 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/types/yup/index.d.ts b/types/yup/index.d.ts index 8794a06179..acff7d2880 100644 --- a/types/yup/index.d.ts +++ b/types/yup/index.d.ts @@ -13,6 +13,7 @@ // Kalley Powell // Elías García // Ian Sanders +// Jay Fong // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 3.6 @@ -250,7 +251,7 @@ export interface ArraySchemaConstructor { new (): NotRequiredArraySchema<{}>; } -interface BasicArraySchema extends Schema { +export interface BasicArraySchema extends Schema { min(limit: number | Ref, message?: ArrayLocale['min']): this; max(limit: number | Ref, message?: ArrayLocale['max']): this; ensure(): this; @@ -572,7 +573,7 @@ export interface FormatErrorParams { export type LocaleValue = string | ((params: FormatErrorParams) => string); -interface MixedLocale { +export interface MixedLocale { default?: TestOptionsMessage; required?: TestOptionsMessage; oneOf?: TestOptionsMessage<{ values: any }>; @@ -580,7 +581,7 @@ interface MixedLocale { notType?: LocaleValue; } -interface StringLocale { +export interface StringLocale { length?: TestOptionsMessage<{ length: number }>; min?: TestOptionsMessage<{ min: number }>; max?: TestOptionsMessage<{ max: number }>; @@ -592,7 +593,7 @@ interface StringLocale { uppercase?: TestOptionsMessage; } -interface NumberLocale { +export interface NumberLocale { min?: TestOptionsMessage<{ min: number }>; max?: TestOptionsMessage<{ max: number }>; lessThan?: TestOptionsMessage<{ less: number }>; @@ -602,16 +603,16 @@ interface NumberLocale { integer?: TestOptionsMessage; } -interface DateLocale { +export interface DateLocale { min?: TestOptionsMessage<{ min: Date | string }>; max?: TestOptionsMessage<{ max: Date | string }>; } -interface ObjectLocale { +export interface ObjectLocale { noUnknown?: TestOptionsMessage; } -interface ArrayLocale { +export interface ArrayLocale { min?: TestOptionsMessage<{ min: number }>; max?: TestOptionsMessage<{ max: number }>; } diff --git a/types/yup/yup-tests.ts b/types/yup/yup-tests.ts index 04ab0d965e..7e4e38c4a5 100644 --- a/types/yup/yup-tests.ts +++ b/types/yup/yup-tests.ts @@ -964,3 +964,32 @@ const arrayOfOptional = yup.array().of( yup.object({ bar: yup.string() }), ).defined(); const arrayOfOptionalExample: yup.InferType = [{}]; + +// augment locale +declare module './index' { + interface StringLocale { + chineseMobilePhoneNumber?: TestOptionsMessage; + } + + interface StringSchema extends Schema { + chineseMobilePhoneNumber(message?: StringLocale['chineseMobilePhoneNumber']): StringSchema; + } +} +yup.setLocale({ + string: { + // tslint:disable-next-line:no-invalid-template-strings + chineseMobilePhoneNumber: '${path} must be a Chinese mobile phone number', + }, +}); +yup.addMethod( + yup.string, + 'chineseMobilePhoneNumber', + function(this: yup.MixedSchema, message: string) { + return this.test( + 'chineseMobilePhoneNumber', + message, + () => true, + ); + }, +); +yup.string().chineseMobilePhoneNumber('please input a Chinese mobile phone number');