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",

.

最新文章

  1. gcc/linux内核中likely、unlikely和__attribute__(section(&quot;&quot;))属性
  2. MemcacheQ安装及使用
  3. android优化从网络中加载图片速度。。
  4. php 批量生成html,txt文件的方法(实例代码)
  5. [Fw]人和人之间在八小时之外的差别
  6. Android之开发常用颜色
  7. Sqlite 错误码
  8. (原创)优酷androidclient 下载中 bug 解决
  9. Linux系统7个运行级别(runlevel)(转)
  10. Struts2标签:checkboxlist
  11. Golang里实现Http服务器并解析header参数和表单参数
  12. 关于使用Unity开发Kinect时出现的Runtime Error错误的解决方式
  13. iOS监听模式系列之通知中心
  14. setting.xml配置文件
  15. 设置tomcat 编译文件位置【转】
  16. linux lftp
  17. Odoo开发调试技巧
  18. nginx反向代理-后端服务器组设置
  19. js this pointer 指针
  20. [总结] Visual Studio 报价已经对比

热门文章

  1. vue打包后找不到资源路径问题
  2. HTTP中GET,POST和PUT的区别
  3. Computer Vision_1_Active Appearance Models:Active Appearance Models——2001
  4. jedis五种数据类型的方法解释
  5. ping不通github
  6. Prim算法和Kruskal算法介绍
  7. Centos6系统启动流程
  8. linux基础_使用指令2
  9. unity shader 剔除指定的颜色
  10. 部署openstack