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 中的报错处理的更多相关文章

  1. IE对象最后一个属性后不要加逗号,否则在IE7及以下版本中会报错

    某函数返回一个对象,如果在最后一个属性后加逗号,IE7及以下版本中会报错 正确代码: return{ top:rect.top-top, bottom:rect.bottom-top, left:re ...

  2. iOS-C文件添加到iOS项目中,运行报错

    iOS-C文件添加到iOS项目中,运行报错 问题: 往项目中添加一个空的c文件, 编译运行; 出现2,30个编译错误. 原因: 由于在项目中添加了Pch文件,在文件中所有代码还没有开始运行之前, pc ...

  3. maven web 项目中启动报错 Java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

    主要原因是maven项目里面的jar包吗,没有导入到项目中 maven web 项目中启动报错 Java.lang.ClassNotFoundException: org.springframewor ...

  4. java中JDBC报错(一)

    java中JDBC报错(一) 1.具体报错如下 com.mysql.jdbc.MySqlDataTruncation:Data truncation:Data too long for column ...

  5. 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 ...

  6. Python3.x:关于urllib中urlopen报错问题的解决方案

    Python3.x:关于urllib中urlopen报错问题的解决方案 调用:urllib.urlopen(url) 报错:AttributeError: 'module' object has no ...

  7. 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 ...

  8. 基于Postman中的报错

    Postman中的报错: Could not get any response 错误 Could not get any response There was an error connecting ...

  9. python2中的unicode()函数在python3中会报错:

    python2中的unicode()函数在python3中会报错:NameError: name 'unicode' is not defined There is no such name in P ...

随机推荐

  1. 微信小程序wxs如何使用

    新建一个.wxs文件 <!-- 引入.wxs文件 src为相对路径,module指定当前模块的名称 --> <wxs module="filter" src=&q ...

  2. Node.js学习(2)-使用模板引擎art-template

    node 安装cnpm i -S art-template 加载require('art-template') template.render接收的是字符串

  3. asp.net 自动检测缓存内容是否变化

    1 使用cache.Insert方法时,新建一个System.Web.Caching.CacheDependency对象,告诉缓存,当缓存的内容发生变化时,将删除缓存,并重新缓存 using Syst ...

  4. 安卓开发之Toolbar返回键

    本文前三步演示了为Toolbar添加返回键并实现返回的步骤,第四步给出了设置返回键颜色的方法. 1.在xml布局中引用toolbar: <android.support.design.widge ...

  5. 这段时间大量网站被k的原因分析

    百度这次更新的K站幅度比较大,通过对被k网站的分析,没有发现文章类型网站有降权现象,主要集中在企业网站上.分析大约30发个网站发现共同明显的特征就是这样的网站有大量的页面只有一张或者两张图片,而这些网 ...

  6. 测试clang-format的格式化效果

    我自己写的业余框架已告一段落,主体功能已完成,剩下的就是优化.第一个要优化的,就是代码格式.我一直是用编辑器写代码的,从之前的UltraEdit到notepad++到sublime text,再到现在 ...

  7. shell脚本编写之Hello World

    Linux下编写第一个Shell脚本 //创建一个.sh文件 vi demo1.sh //按i进入编辑模式 echo "Hello World !" //按esc→shift+:→ ...

  8. thymeleaf的内联th:inline(在javascript访问model中的数据)

    thymeleaf模板引擎为前端数据的获取提供了较大的便利,在html标签内可通过th标签加${}表达式访问model里的对象数据.但如果不想通过th标签而是简单地访问model对象数据,或是想在ja ...

  9. Linux 下升级Android Studio失败

    在Linux下进行升级的时候,会弹出一个窗口,有一个表格,从表中发现在进行某些更新某些包是没有权限,解决方法很简单,将Android Studio安装文件夹改成当前Linux登陆用户即可. 1.找到A ...

  10. [原创]在Windows平台使用msys2、mingw64和vscode编写和调试C/C++代码

    相关名词就不解释了,这里主要讲讲在vscode里怎么配,这里假设大家相关工具已经装好. 题外话:里面的大多数坑都是windows平台和linux平台的差异造成的,如果在linux平台配置,应该会顺利很 ...