1.创建 声明模块

index.d.ts

  1. import { Component, ClassicComponentClass, ClassType, ComponentClass, ComponentSpec, Mixin, ReactNode, ClassicComponent, ComponentState } from "react";
  2. import PropTypes, { Requireable, InferProps } from "prop-types";
  3.  
  4. export interface ValidateMessages {
  5. 'default'?: string;
  6. required?: string;
  7. 'enum'?: string;
  8. whitespace?: string;
  9. date?: {
  10. format?: string;
  11. parse?: string;
  12. invalid?: string;
  13. };
  14. types?: {
  15. string?: string;
  16. method?: string;
  17. array?: string;
  18. object?: string;
  19. number?: string;
  20. date?: string;
  21. boolean?: string;
  22. integer?: string;
  23. float?: string;
  24. regexp?: string;
  25. email?: string;
  26. url?: string;
  27. hex?: string;
  28. };
  29. string?: {
  30. len?: string;
  31. min?: string;
  32. max?: string;
  33. range?: string;
  34. };
  35. number?: {
  36. len?: string;
  37. min?: string;
  38. max?: string;
  39. range?: string;
  40. };
  41. array?: {
  42. len?: string;
  43. min?: string;
  44. max?: string;
  45. range?: string;
  46. };
  47. pattern?: {
  48. mismatch?: string;
  49. };
  50. clone?: () => ValidateMessages;
  51. }
  52. export class Field { [s: string]: any }
  53.  
  54. export type FormTrigger = 'onChange' | 'onBlur' | 'onMouseOver' | 'onMouseMove' | 'onMouseOut' |
  55. 'onEnter' | 'onLeave';
  56. export type FormValidateType = 'string' | 'number' | 'boolean' | 'method' | 'regexp' | 'integer' |
  57. 'float' | 'array' | 'object' | 'enum' | 'date' | 'url' | 'hex' | 'email';
  58. export interface FormValidateRule {
  59. type?: FormValidateType;
  60. required?: boolean;
  61. message?: any;
  62. pattern?: RegExp;
  63. range?: { min?: number; max?: number };
  64. len?: number;
  65. role?: { type: "enum", enum: any[] };
  66. fields?: {
  67. [fieldName: string]: FormValidateRule;
  68. [fieldIndex: number]: FormValidateRule;
  69. };
  70. defaultField?: FormValidateRule;
  71. transform?: (value: any) => any;
  72. asyncValidator?(rule: FormValidateRule, value: any): Promise<any>;
  73. asyncValidator?(rule: FormValidateRule, value: any, callback: (error?: any) => void): void;
  74. validator?(
  75. rule: FormValidateRule,
  76. value: any,
  77. callback?: (error?: Error) => void,
  78. source?: ValidateValues,
  79. options?: ValidateFieldsOptions
  80. ): boolean | Error | Error[];
  81. [ruleName: string]: any;
  82. }
  83.  
  84. export interface GetFieldPropsOptions {
  85. valuePropName?: string;
  86. getValueProps?(value: any): any;
  87. getValueFromEvent?(e: any): any;
  88. initialValue?: any;
  89. normalize?(value: any, prev: any, all: any): any;
  90. trigger?: FormTrigger;
  91. validateTrigger?: FormTrigger;
  92. rules?: FormValidateRule | FormValidateRule[];
  93. validateFirst?: boolean;
  94. validate?: { trigger?: FormTrigger; rules?: FormValidateRule | FormValidateRule[] };
  95. hidden?: boolean;
  96. preserve?: boolean;
  97. }
  98.  
  99. export type ValidateErrors = {
  100. [fieldName: string]: {
  101. errors: Array<{ message: string; field: string; [s: string]: any }>
  102. }
  103. } | null;
  104. export type ValidateValues = {
  105. [fieldName: string]: any
  106. };
  107. export type ValidateFieldsOptions = {
  108. suppressWarning?: boolean;
  109. first: boolean;
  110. firstFields?: boolean | string[];
  111. force?: boolean;
  112. messages?: ValidateMessages;
  113. [s: string]: any;
  114. };
  115.  
  116. export interface WrappedFormMethods {
  117. getFieldProps(name: string, options: GetFieldPropsOptions): any;
  118. getFieldDecorator(name: string, option: any): (node: ReactNode) => ReactNode;
  119. getFieldsValue(fieldName?: string[]): any;
  120. getFieldValue(fieldName: string): any;
  121. getFieldInstance(fieldName: string): any;
  122. setFieldsValue(changedValues: any, callback: (...args: any[]) => any): void;
  123. setFields(maybeNestedFields: any, callback: (...args: any[]) => any): void;
  124. setFieldsInitialValue(initialValues: any): void;
  125.  
  126. validateFields(fieldNames: string[], options: ValidateFieldsOptions, callback: (errors: ValidateErrors, values: any[]) => void): Promise<any>;
  127. validateFields(fieldNames: string[], options: ValidateFieldsOptions): Promise<any>;
  128. validateFields(options: ValidateFieldsOptions, callback: (errors: ValidateErrors, values: any[]) => void): Promise<any>;
  129. validateFields(fieldNames: string[], callback: (errors: ValidateErrors, values: any[]) => void): Promise<any>;
  130. validateFields(callback: (errors: ValidateErrors, values: any[]) => void): Promise<any>;
  131.  
  132. getFieldsError(names?: string[]): any;
  133. getFieldError(name: string): any;
  134. isFieldValidating(name: string): boolean;
  135. isFieldsValidating(names?: string[]): boolean;
  136. isFieldTouched(name: string): boolean;
  137. isFieldsTouched(names?: string[]): boolean;
  138. isSubmitting(): boolean; // Deprecated
  139. submit(callback: (setSubmitting: () => void) => void): void // Deprecated
  140. resetFields(names?: string[]): void;
  141. }
  142.  
  143. type Shaped<P> = {
  144. [K in keyof P]: PropTypes.Requireable<(...args: any[]) => any>;
  145. }
  146.  
  147. export interface FormMixin<P, S> extends Array<Mixin<P, S>> {
  148. getForm(): WrappedFormMethods;
  149. }
  150.  
  151. export type WrappedFormClass<P> = ComponentClass<P> & WrappedFormMethods;
  152.  
  153. export type Decorate<P> = (WrappedComponent: ComponentClass<P>) => WrappedFormClass<P>;
  154.  
  155. export type FormPropsType<F> = { [K in keyof F]: WrappedFormMethods; };
  156. export type PropsWithForm<P, F> = P & FormPropsType<F>;
  157.  
  158. export interface CreateFormOptions<P> {
  159. validateMessages?: ValidateMessages;
  160. onFieldsChange?: (props: P, changed: any, all: any) => void;
  161. onValuesChange?: (props: P, changed: any, all: any) => void;
  162. mapProps?: (props: P) => P;
  163. mapPropsToFields?: (props: P) => void;
  164. fieldNameProp?: string;
  165. fieldMetaProp?: string;
  166. fieldDataProp?: string;
  167. formPropName?: string;
  168. name?: string;
  169. withRef?: boolean; // deprecated
  170. }
  171.  
  172. export function createForm<P>(options?: CreateFormOptions<P>): Decorate<P>;
  173. export function createFormField(field: any): Field;
  174. export const formShape: Requireable<InferProps<Shaped<WrappedFormMethods>>>;
  175.  
  176. declare module 'rc-form';

2.置于

node_modules/rc-form/lib/index.d.ts

3.使用

  1. import { createForm } from 'rc-form';
  2. ...
  3.  
  4. interface IProps {
  5. form: any;
  6. }
  7. ...
  8.  
  9. export default createForm<IProps>()(LeaveMessage);

取值

  1. const { getFieldProps } = this.props.form;
  2.  
  3. <input {...getFieldProps('username', {
  4. onChange(){}, // have to write original onChange here if you need
  5. rules: [{required: true}],
  6. })}/>
  7.  
  8. handleSubmit = () => {
  9. this.props.form.validateFields((error:any, value:any) => {
  10. console.log(error, value);
  11. });
  12. }

或者,在 package.json 中

  1. "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. Python应用范围seo

    Python有许多OOP概念,包括类.对象.数据和方法.抽象.封装.继承和多态性等原则也可以使用Python实现和表示.python有几个高级函数,包括迭代器.生成器.列表分析器.lambda表达式和 ...

  2. C#验证控件使用方法及常用正则表达式例析(转)

    ASP.NET为开发人员提供了一整套完整的服务器控件来验证用户输入的信息是否有效.这些控件如下: 1.RequiredFieldValidator:验证一个必填字段,如果这个字段没填,那么,将不能提交 ...

  3. 调查问卷WebApp

    1. 效果演示 2. 主要知识点 使用slot分发内容 动态组件 组件通信 实例的生命周期 表单 3. 遇到的问题 bus 通信 第一次 $on 监听不到 // 解决bus 第一次通信 $on 监听不 ...

  4. C# List集合去除重复数据

    实例如下: using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; ...

  5. QQ气泡效果剖析

    对于QQ汽泡效果我想不用多说了,都非常的熟悉,而且当时这效果出来简直亮瞎眼了,挺炫的,这里再来感受下: 而这次只实现单个汽泡的效果,并不涉及到加入Listview上的处理,一步步来,先上一下最终这次要 ...

  6. Ubuntu安装截图软件shutter

    参考链接: Ubuntu 安装和配置shutter截图软件 解决shutter不能编辑的问题:https://itsfoss.com/shutter-edit-button-disabled/ 安装前 ...

  7. Redis入门(一)——安装

    1.下载地址,选择对应版本 https://github.com/dmajkic/redis/downloads 2.下载解压后,进入到文件夹,地址栏cmd,redis-server.exe redi ...

  8. JavaScript教程——JavaScript 的基本语法(标识符)

    标识符 标识符(identifier)指的是用来识别各种值的合法名称.最常见的标识符就是变量名,以及后面要提到的函数名.JavaScript 语言的标识符对大小写敏感,所以a和A是两个不同的标识符. ...

  9. VSCode 常用快捷键和常用插件及通用设置

    https://code.visualstudio.com/docs?start=true 一.常用快捷键:参考:https://blog.csdn.net/liwan09/article/detai ...

  10. Cobbler安装和配置

    1.yum国内源的安装与更新 1.1 备份原repo文件 cd /etc/yum.repo.d/ mkdir repo_bak mv *.repo repo_bak 1.2 在centos中配置网易和 ...