最近用react + antd mobile + typescript开发项目,其中使用了rc-form这个包,可惜没有typescript版本,导致找不到类型定义。

一起来重温一下这个经典的错误。

D:/Code/test/src/pages/me/register/RegisterTest.tsx
TypeScript error in D:/Code/test/src/pages/me/register/RegisterTest.tsx(5,28):
File 'D:/Code/test/src/rc-form.d.ts' is not a module. TS2306 3 | import BrowserHistory from '../../../router/BrowserHistory';
4 | import { AppUrls } from '../../../http/AppUrls';
> 5 | import { createForm } from "rc-form";
| ^
6 | import MyToast from '../../../componets/MyToast';
7 |
8 | export function RegisterTest(props: any) {

解决办法:

在网上查了很久,那些修改typeRoots的方法根本不好使,太坑人了。下面的方法绝对好用!

1. 修改项目根目录下的tsconfig.json文件,添加baseUrl选项,由于项目是用create-react-app创建的,这个值只能是src或者node_modules,推荐用src。

2. 编写类型定义文件rc-form.d.ts,内容如下:

declare module 'rc-form' {
export const createForm: Function;
}

3. 将rc-form.d.ts放入项目的src目录下。

4. 在需要使用rc-form模块的文件里直接导入即可。

import { createForm } from "rc-form";

===

最新方法:

tsconfig这样配置,注意typeRoots要放到compilerOptions结点下面。

{
"compilerOptions": {
"target": "es6",
"lib": [
"dom",
"dom.iterable",
"esnext",
"es2015"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react",
"baseUrl": "src",
"typeRoots": [
"src/custom_types",
"node_modules/@types"

]

},
"include": [
"src"
]
}

2. src目录下新建一个文件夹custom_types,放入类型定义文件,如下。

===

react项目添加typescript类型定义文件 .d.ts的更多相关文章

  1. JavaScript 和 TypeScript 交叉口 —— 类型定义文件(*.d.ts)

    在 <从 JavaScript 到 TypeScript 系列> 文章我们已经学习了 TypeScript 相关的知识. TypeScript 的核心在于静态类型,我们在编写 TS 的时候 ...

  2. TypeScript 学习四 面向对象的特性,泛型,接口,模块,类型定义文件*.d.ts

    1,面向对象的特性一:类,继承,见上一篇博客: 2,面向对象的特性二: 泛型(generic):参数化的类型,一般用来限制集合的内容:指定只能放某个类型的元素 如下图中的尖括号中的Person,就代表 ...

  3. TypeScript 类型定义文件(*.d.ts)自动生成工具

    在开发ts时,有时会遇到没有d.ts文件的库,同时在老项目迁移到ts项目时也会遇到一些文件需要自己编写声明文件,但是在需要的声明文件比较多的情况,就需要自动生产声明文件.用过几个库.今天简单记录一下. ...

  4. TypeScript类型定义文件(*.d.ts)生成工具

    在开发ts时,有时会遇到没有d.ts文件的库,同时在老项目迁移到ts项目时也会遇到一些文件需要自己编写声明文件,但是在需要的声明文件比较多的情况,就需要自动生产声明文件.用过几个库.今天简单记录一下. ...

  5. CesiumJS新增官方TypeScript类型定义

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 在当前的1.70版本中,CesiumJS现在附带了正式的Type ...

  6. 转载 《TypeScript 类型定义 DefinitelyTyped》

    快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中.   <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...

  7. 在react项目添加看板娘(react-live2d)

    有留意到看板娘这么个东西,简直就是我们程序员+动漫迷的挚爱.但是回观网上,大多只是在老旧的html的静态引入.vue甚至也有几个不怎么维护的,还是老旧的不行的SDK2.X的版本.这这这这!我们的rea ...

  8. pycharm项目添加.gitignore忽略.idea文件夹

    本地项目结构: .gitignore文件中添加: at_alsv_pro/.idea/SearchImage.iml at_alsv_pro/.idea/misc.xml at_alsv_pro/.i ...

  9. react项目中如何出现config文件夹

    答案:运行  npm run eject  即可出现config文件夹 原因: 在package.json中:只有三个依赖,分别是react,react-dom,react-scripts,依赖为什么 ...

  10. 初始化一个React项目(TypeScript环境)

    React将由三部分组成,其中,Redux是应用状态管理服务,React-Router用于路由映射,React View用于显示界面. 我们使用Facebook推荐的create-react-app来 ...

随机推荐

  1. mysql [Err] 1067 - Invalid default value for

    出错原因 mysql5.7版本引起的默认值不兼容的问题,同样的问题在mysql8.0可能也会出现. 出问题的值有: NO_ZERO_IN_DATE 在严格模式下,不允许日期和月份为零. NO_ZERO ...

  2. Mac port 443: Connection refused

    MAC 安装brew raw.githubusercontent.com port 443: Connection refused 本人亲自认证过,踩过多种方案,最终认证的解决方案 原因:由于某些你懂 ...

  3. 张高兴的大模型开发实战:(二)使用 LangChain 构建本地知识库应用

    目录 基础概念 什么是 LangChain 什么是 Ollama 环境搭建与配置 安装 Ollama 安装 LangChain 文档加载 加载 JSON 数据 加载文件夹中的文档 文本向量化 实现问答 ...

  4. 一文速通Python并行计算:01 Python多线程编程-基本概念、切换流程、GIL锁机制和生产者与消费者模型

    一文速通 Python 并行计算:01 Python 多线程编程-基本概念.切换流程.GIL 锁机制和生产者与消费者模型 摘要: 多线程允许程序同时执行多个任务,提升效率和响应性.线程分为新建.就绪. ...

  5. BigDecimal类--java进阶day05

    1.BigDecimal出现的原因 2.BigDecimal的创建 不推荐第一种形式,会有误差 第二种方式创建对象 第三种方式调用方法 2.BigDecimal常用方法 除法的特殊事项 如果有除不尽的 ...

  6. js 小数取整

    小数取整 var num = 123.456; // 常规方法 console.log(parseInt(num)); // 123 // 双重按位非 console.log(~~num); // 1 ...

  7. 如何学习SLAM(超级全面)

    如何学习SLAM(超级全面) 由于SLAM是一个错综复杂的研究领域,涉及到非常多的关键技术.这里先讲讲学习方法论,然后对一些关键性概念(包括SLAM.ROS.SLAM移动机器人)进行分析,最后给出典型 ...

  8. SRAM的读、写操作、信息保持原理

    \(Vcc\)会使得\(T_3\)和\(T_4\)导通,但是哪个先导通是随机的,那么当\(T3\)先导通的时候,\(a\)点变为高电平,此时电流经由 \(a\) 点导通\(T2\),\(T2\)导通, ...

  9. H5 ios端微信浏览器下-底部工具固定方法

    在外层配置css position: fixed; width: 100%; top: 0px; bottom: 0px; overflow: auto; 结束

  10. Spring AI与DeepSeek实战四:系统API调用

    一.概述 在 AI 应用开发中,工具调用 Tool Calling 是增强大模型能力的核心技术.通过让模型与外部 API 或工具交互,可实现 实时信息检索(如天气查询.新闻获取).系统操作(如创建任务 ...