是的 addMethod 在 typescript 是的版本中不起作用
yup addMethod not working in typescript yup version
当使用 addMethod 函数将自定义方法添加到 yup 实例时,会产生以下错误
TS2339:属性 'title' 在类型 'typeof import("node_modules/yup/lib/index")'
上不存在
重现
yupInstance.ts 文件
import * as yup from 'yup';
function defaultTitleValidation(this: any, local: 'en' | 'bn') {
return this.string().trim().required();
}
yup.addMethod(yup.string, 'title', defaultTitleValidation);
export default yup;
common.d.ts 文件
declare module 'yup' {
interface StringSchema<TIn, TContext, TOut> {
title(local: 'en' | 'bn'): any;
}
}
myImplementationComponent.tsx
import yup from '../../../../common/yup';
const validationSchema = yup.object().shape({
title_en: yup.title(), // TS2339: Property 'title' does not exist on type 'typeof import("node_modules/yup/lib/index")'
});
通过扩展 yup.BaseSchema
接口解决。
declare module 'yup' {
interface StringSchema<
TType extends Maybe<string> = string | undefined,
TContext extends AnyObject = AnyObject,
TOut extends TType = TType,
> extends yup.BaseSchema<TType, TContext, TOut> {
title(local: 'en' | 'bn'): StringSchema<TType, TContext>;
}
}
自定义方法
function defaultTitleValidation(this: any, local: 'en' | 'bn') {
return this.trim().required(); //before this.string().trim().required();
}
实施
const validationSchema = yup.object().shape({
title_en: yup.string().title('en'), //before yup.title(),
});
当使用 addMethod 函数将自定义方法添加到 yup 实例时,会产生以下错误
TS2339:属性 'title' 在类型 'typeof import("node_modules/yup/lib/index")'
上不存在重现
yupInstance.ts 文件
import * as yup from 'yup';
function defaultTitleValidation(this: any, local: 'en' | 'bn') {
return this.string().trim().required();
}
yup.addMethod(yup.string, 'title', defaultTitleValidation);
export default yup;
common.d.ts 文件
declare module 'yup' {
interface StringSchema<TIn, TContext, TOut> {
title(local: 'en' | 'bn'): any;
}
}
myImplementationComponent.tsx
import yup from '../../../../common/yup';
const validationSchema = yup.object().shape({
title_en: yup.title(), // TS2339: Property 'title' does not exist on type 'typeof import("node_modules/yup/lib/index")'
});
通过扩展 yup.BaseSchema
接口解决。
declare module 'yup' {
interface StringSchema<
TType extends Maybe<string> = string | undefined,
TContext extends AnyObject = AnyObject,
TOut extends TType = TType,
> extends yup.BaseSchema<TType, TContext, TOut> {
title(local: 'en' | 'bn'): StringSchema<TType, TContext>;
}
}
自定义方法
function defaultTitleValidation(this: any, local: 'en' | 'bn') {
return this.trim().required(); //before this.string().trim().required();
}
实施
const validationSchema = yup.object().shape({
title_en: yup.string().title('en'), //before yup.title(),
});