🤖 Merge PR #45428 [yup] Export Locale interfaces for augmentation by @fjc0k

* [yup] Export Locale interfaces for augmentation

* [yup] Update maintainer

* [yup] Export BasicArraySchema
This commit is contained in:
Jay Fong 2020-06-12 19:52:48 +08:00 committed by GitHub
parent dd6514849a
commit 3adfafbd7d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 7 deletions

15
types/yup/index.d.ts vendored
View File

@ -13,6 +13,7 @@
// Kalley Powell <https://github.com/kalley>
// Elías García <https://github.com/elias-garcia>
// Ian Sanders <https://github.com/iansan5653>
// Jay Fong <https://github.com/fjc0k>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 3.6
@ -250,7 +251,7 @@ export interface ArraySchemaConstructor {
new (): NotRequiredArraySchema<{}>;
}
interface BasicArraySchema<E, T extends E[] | null | undefined> extends Schema<T> {
export interface BasicArraySchema<E, T extends E[] | null | undefined> extends Schema<T> {
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 }>;
}

View File

@ -964,3 +964,32 @@ const arrayOfOptional = yup.array().of(
yup.object({ bar: yup.string() }),
).defined();
const arrayOfOptionalExample: yup.InferType<typeof arrayOfOptional> = [{}];
// augment locale
declare module './index' {
interface StringLocale {
chineseMobilePhoneNumber?: TestOptionsMessage;
}
interface StringSchema<T extends string | null | undefined = string | undefined> extends Schema<T> {
chineseMobilePhoneNumber(message?: StringLocale['chineseMobilePhoneNumber']): StringSchema<T>;
}
}
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<any>, message: string) {
return this.test(
'chineseMobilePhoneNumber',
message,
() => true,
);
},
);
yup.string().chineseMobilePhoneNumber('please input a Chinese mobile phone number');