rc-form 在 typescript 中的报错处理
1.创建 声明模块
index.d.ts
import { Component, ClassicComponentClass, ClassType, ComponentClass, ComponentSpec, Mixin, ReactNode, ClassicComponent, ComponentState } from "react";
import PropTypes, { Requireable, InferProps } from "prop-types";
export interface ValidateMessages {
'default'?: string;
required?: string;
'enum'?: string;
whitespace?: string;
date?: {
format?: string;
parse?: string;
invalid?: string;
};
types?: {
string?: string;
method?: string;
array?: string;
object?: string;
number?: string;
date?: string;
boolean?: string;
integer?: string;
float?: string;
regexp?: string;
email?: string;
url?: string;
hex?: string;
};
string?: {
len?: string;
min?: string;
max?: string;
range?: string;
};
number?: {
len?: string;
min?: string;
max?: string;
range?: string;
};
array?: {
len?: string;
min?: string;
max?: string;
range?: string;
};
pattern?: {
mismatch?: string;
};
clone?: () => ValidateMessages;
}
export class Field { [s: string]: any }
export type FormTrigger = 'onChange' | 'onBlur' | 'onMouseOver' | 'onMouseMove' | 'onMouseOut' |
'onEnter' | 'onLeave';
export type FormValidateType = 'string' | 'number' | 'boolean' | 'method' | 'regexp' | 'integer' |
'float' | 'array' | 'object' | 'enum' | 'date' | 'url' | 'hex' | 'email';
export interface FormValidateRule {
type?: FormValidateType;
required?: boolean;
message?: any;
pattern?: RegExp;
range?: { min?: number; max?: number };
len?: number;
role?: { type: "enum", enum: any[] };
fields?: {
[fieldName: string]: FormValidateRule;
[fieldIndex: number]: FormValidateRule;
};
defaultField?: FormValidateRule;
transform?: (value: any) => any;
asyncValidator?(rule: FormValidateRule, value: any): Promise<any>;
asyncValidator?(rule: FormValidateRule, value: any, callback: (error?: any) => void): void;
validator?(
rule: FormValidateRule,
value: any,
callback?: (error?: Error) => void,
source?: ValidateValues,
options?: ValidateFieldsOptions
): boolean | Error | Error[];
[ruleName: string]: any;
}
export interface GetFieldPropsOptions {
valuePropName?: string;
getValueProps?(value: any): any;
getValueFromEvent?(e: any): any;
initialValue?: any;
normalize?(value: any, prev: any, all: any): any;
trigger?: FormTrigger;
validateTrigger?: FormTrigger;
rules?: FormValidateRule | FormValidateRule[];
validateFirst?: boolean;
validate?: { trigger?: FormTrigger; rules?: FormValidateRule | FormValidateRule[] };
hidden?: boolean;
preserve?: boolean;
}
export type ValidateErrors = {
[fieldName: string]: {
errors: Array<{ message: string; field: string; [s: string]: any }>
}
} | null;
export type ValidateValues = {
[fieldName: string]: any
};
export type ValidateFieldsOptions = {
suppressWarning?: boolean;
first: boolean;
firstFields?: boolean | string[];
force?: boolean;
messages?: ValidateMessages;
[s: string]: any;
};
export interface WrappedFormMethods {
getFieldProps(name: string, options: GetFieldPropsOptions): any;
getFieldDecorator(name: string, option: any): (node: ReactNode) => ReactNode;
getFieldsValue(fieldName?: string[]): any;
getFieldValue(fieldName: string): any;
getFieldInstance(fieldName: string): any;
setFieldsValue(changedValues: any, callback: (...args: any[]) => any): void;
setFields(maybeNestedFields: any, callback: (...args: any[]) => any): void;
setFieldsInitialValue(initialValues: any): void;
validateFields(fieldNames: string[], options: ValidateFieldsOptions, callback: (errors: ValidateErrors, values: any[]) => void): Promise<any>;
validateFields(fieldNames: string[], options: ValidateFieldsOptions): Promise<any>;
validateFields(options: ValidateFieldsOptions, callback: (errors: ValidateErrors, values: any[]) => void): Promise<any>;
validateFields(fieldNames: string[], callback: (errors: ValidateErrors, values: any[]) => void): Promise<any>;
validateFields(callback: (errors: ValidateErrors, values: any[]) => void): Promise<any>;
getFieldsError(names?: string[]): any;
getFieldError(name: string): any;
isFieldValidating(name: string): boolean;
isFieldsValidating(names?: string[]): boolean;
isFieldTouched(name: string): boolean;
isFieldsTouched(names?: string[]): boolean;
isSubmitting(): boolean; // Deprecated
submit(callback: (setSubmitting: () => void) => void): void // Deprecated
resetFields(names?: string[]): void;
}
type Shaped<P> = {
[K in keyof P]: PropTypes.Requireable<(...args: any[]) => any>;
}
export interface FormMixin<P, S> extends Array<Mixin<P, S>> {
getForm(): WrappedFormMethods;
}
export type WrappedFormClass<P> = ComponentClass<P> & WrappedFormMethods;
export type Decorate<P> = (WrappedComponent: ComponentClass<P>) => WrappedFormClass<P>;
export type FormPropsType<F> = { [K in keyof F]: WrappedFormMethods; };
export type PropsWithForm<P, F> = P & FormPropsType<F>;
export interface CreateFormOptions<P> {
validateMessages?: ValidateMessages;
onFieldsChange?: (props: P, changed: any, all: any) => void;
onValuesChange?: (props: P, changed: any, all: any) => void;
mapProps?: (props: P) => P;
mapPropsToFields?: (props: P) => void;
fieldNameProp?: string;
fieldMetaProp?: string;
fieldDataProp?: string;
formPropName?: string;
name?: string;
withRef?: boolean; // deprecated
}
export function createForm<P>(options?: CreateFormOptions<P>): Decorate<P>;
export function createFormField(field: any): Field;
export const formShape: Requireable<InferProps<Shaped<WrappedFormMethods>>>;
declare module 'rc-form';
2.置于
node_modules/rc-form/lib/index.d.ts

3.使用
import { createForm } from 'rc-form';
...
interface IProps {
form: any;
}
...
export default createForm<IProps>()(LeaveMessage);
取值
const { getFieldProps } = this.props.form;
<input {...getFieldProps('username', {
onChange(){}, // have to write original onChange here if you need
rules: [{required: true}],
})}/>
handleSubmit = () => {
this.props.form.validateFields((error:any, value:any) => {
console.log(error, value);
});
}
或者,在 package.json 中
"rc-form": "https://github.com/crazyCode2/rc-form.git",
.
rc-form 在 typescript 中的报错处理的更多相关文章
- IE对象最后一个属性后不要加逗号,否则在IE7及以下版本中会报错
某函数返回一个对象,如果在最后一个属性后加逗号,IE7及以下版本中会报错 正确代码: return{ top:rect.top-top, bottom:rect.bottom-top, left:re ...
- iOS-C文件添加到iOS项目中,运行报错
iOS-C文件添加到iOS项目中,运行报错 问题: 往项目中添加一个空的c文件, 编译运行; 出现2,30个编译错误. 原因: 由于在项目中添加了Pch文件,在文件中所有代码还没有开始运行之前, pc ...
- maven web 项目中启动报错 Java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
主要原因是maven项目里面的jar包吗,没有导入到项目中 maven web 项目中启动报错 Java.lang.ClassNotFoundException: org.springframewor ...
- java中JDBC报错(一)
java中JDBC报错(一) 1.具体报错如下 com.mysql.jdbc.MySqlDataTruncation:Data truncation:Data too long for column ...
- IntelliJ IDEA中项目报错org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 8 或maven操作compile报resource使用utf8这样的编码错
问题:项目开发工具已经setting成utf-8 并且项目各方面的配置文件包括maven这些的pom.xml里的配置都已经设置为utf-8 但是还报错 IntelliJ IDEA中项目报错org.xm ...
- Python3.x:关于urllib中urlopen报错问题的解决方案
Python3.x:关于urllib中urlopen报错问题的解决方案 调用:urllib.urlopen(url) 报错:AttributeError: 'module' object has no ...
- maven项目中的报错问题——Dynamic Web Module 3.0 requires Java 1.6 or newer.
转自:http://www.cnblogs.com/beppezhang/p/5919221.html maven项目中的报错问题——Dynamic Web Module 3.0 requires J ...
- 基于Postman中的报错
Postman中的报错: Could not get any response 错误 Could not get any response There was an error connecting ...
- python2中的unicode()函数在python3中会报错:
python2中的unicode()函数在python3中会报错:NameError: name 'unicode' is not defined There is no such name in P ...
随机推荐
- 微信小程序中weui使用方法
1.git下载,找到dist文件: https://github.com/wechat-miniprogram/weui-miniprogram 2.把dist文件中的style复制到根目录 app. ...
- kalilinux 渗透测试笔记
声明:本文理论大部分是苑房弘kalilinux渗透测试的内容 第五章:基本工具 克隆网页,把gitbook的书记下载到本地 httrack "http://www.mybatis.org/m ...
- 了解jQuery的detach()和remove()
jQuery中提供了两种移出一个DOM元素的方法detach()和remove(),虽然是一样的功能,但是给出两种方法,必然有它的不同之处. empty() 单独说一下 ,它删除当前元素的所有子元素, ...
- Linux小试牛刀
1.统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来 [root@centos7data]#getent passwd | grep -v ...
- TCP/IP协议簇 端口 三次握手 四次挥手 11种状态集
第一章:概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN (Virturl LAN) ,翻译成中文是:“虚拟局域网”.VLAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计 ...
- C# 委托、lambda表达式和事件 (7) 持续更新
引用方法 在C++,函数指针只不过是一个指向内存位置的指针,它不是类型安全的. C# 委托 定义了返回类型和参数的类型.委托类包含对方法的引用,还可以包含多个方法引用. 定义委托 public del ...
- deferred shading , tile deferred, cluster forward 对tranparent支持问题的思考
cluster对 trans的支持我大概理解了 http://efficientshading.com/wp-content/uploads/tiled_shading_siggraph_2012.p ...
- lite-monitor 一款基于shell命令的监控系统
介绍 lite-monitor 一款基于shell命令的监控系统,可以根据项目中输出的日志定时输出或者统计输出,并发送钉钉机器人报警消息. lite-monitor能做什么: 定时监控某个服务进程是否 ...
- 利用collections下的counter实现对列表重复元素的查重
mylist = [0,1,1,2,2,3,3,3,3,4,5,6,7,7,8,8,9,10,10,11,22,33,22] from collections import Counter c = C ...
- springAOP分析
参考https://www.cnblogs.com/liuyk-code/p/9886033.html 在springboot中自动引入了配置文件AopAutoConfiguration @Confi ...