当前位置: 首页 > news >正文

TS - tsconfig.json 和 tsconfig.node.json 的关系,如何在TS 中使用 JS 不报错

目录

  • 1,前言
  • 2,二者关系
    • 2.1,使用
  • 3,遇到的问题
    • 3.1,TS 中使用 JS

1,前言

通过 Vite 创建的 Vue3 + TS 项目,根目录下会有 tsconfig.jsontsconfig.node.json 文件,并且存在引用关系:

{"compilerOptions": {// 其他配置项...},"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"],"references": [{ "path": "./tsconfig.node.json" }]
}

tsconfig.node.json 文件(配置项比 tsconfig.json 少很多):

{"compilerOptions": {"composite": true, // 配合 references 配置项使用。// 其他配置项...},"include": ["vite.config.ts"]
}

2,二者关系

1,TS 只能识别 tsconfig.json 为配置文件,不能识别其他的配置文件。

2,随着项目的变的越来越复杂,为了更精细化的控制,需要允许为不同的文件设置不同的配置。

基于上面的2个原因,TS增加一个功能:项目引用(Project References)

2.1,使用

tsconfig.jsontsconfig.node.json 为例,其他的配置文件必须有一个配置项 "composite": true,并且在 tsconfig.json 文件中通过配置项 references 引入,这样 TS 就能识别。

同时,不同的配置文件之间的配置项相互独立,只会影响当前配置文件中的 include 字段。

所以,Vite 创建的 Vue3 + TS 项目中,tsconfig.node.json 只会影响到 vite.config.ts 文件。

3,遇到的问题

3.1,TS 中使用 JS

接手的一个Vue3项目中,在 main.ts 中遇到下面的报错(竟然一直没有解决):

在这里插入图片描述

报错信息:
Could not find a declaration file for module './App.vue'. 'd:/xxx/src/App.vue' implicitly has an 'any' type.ts(7016)

直接搜索错误 implicitly has an 'any' type,得到答案,修改配置项即可:

{"compilerOptions": {"noImplicitAny": false}
}

但后来发现,问题的产生是因为其他同事觉得 ts 麻烦,想直接使用 js,所以做了如下修改:

<script setup lang="ts">
<!-- 改为 -->
<script setup>

此时配置项 "strict": true 就会发挥作用(第5点),

该配置项启用时,包含的一些关键编译选项:

  1. strictBindCallApply: 确保 bind, call, apply 方法的参数类型被正确地类型检查。

  2. strictFunctionTypes: 对函数类型进行严格检查,包括参数和返回值的类型。这意味着函数的参数列表和返回值类型必须完全匹配。

  3. strictNullChecks: 启用严格的空值检查。在这种模式下,TypeScript 编译器会更加严格地检查位置类型和联合类型中可能为 null 或 undefined 的位置。

  4. strictPropertyInitialization: 确保类的非 undefined 属性在构造函数中被初始化。

  5. noImplicitAny: 禁止使用隐式的 any 类型。这有助于避免类型系统的退化,确保类型被明确地声明。

  6. strictTypePredicates: 严格检查类型谓词(如 typeof, instanceof)在类型守卫中的使用。

  7. noImplicitThis: 确保 this 参数被明确地类型化,而不是隐式地推断为 any 类型。

  8. alwaysStrict: 将严格模式应用于所有输入文件,就像它们是以严格模式开始的。


所以更准确的修改,应该是增加下面配置项即可:

{"compilerOptions": {"allowJs": true}
}

以上。

参考

http://www.lryc.cn/news/439404.html

相关文章:

  • revisiting拉普拉斯模板
  • 深入分析计算机网络性能指标
  • pyflink 安装和测试
  • 《网络故障处理案例:公司网络突然中断》
  • JavaSE:9、数组
  • 【裸机装机系列】2.kali(ubuntu)-裸机安装kali并进行磁盘分区-2024.9最新
  • 解决:Vue 中 debugger 不生效
  • Mac笔记本上查看/user/目录下的文件的几种方法
  • 工程师 - ACPI和ACPICA的区别
  • 一文快速上手-create-vue脚手架
  • 笔记整理—内核!启动!—kernel部分(7)rcs文件和登录部分与密码解析
  • 朴素贝叶斯 (Naive Bayes)
  • 高德2.0 多边形覆盖物无法选中编辑
  • 时序最佳入门代码|基于pytorch的LSTM天气预测及数据分析
  • 85-MySQL怎么判断要不要加索引
  • 车载软件架构 --- SOA设计与应用(中)
  • MATLAB求解微分方程和微分方程组的详细分析
  • Sybase「退役」在即,某公共卫生机构如何实现 SAP Sybase 到 PostgreSQL 的持续、无缝数据迁移?
  • 如何通过Chrome浏览器轻松获取视频网站的TS文件
  • Linux下进程间的通信--共享内存
  • Big Data 流处理框架 Flink
  • 校园水电费管理微信小程序的设计与实现+ssm(lw+演示+源码+运行)
  • HashMap线程不安全|Hashtable|ConcurrentHashMap
  • 01 会计概述
  • 开放式激光振镜运动控制器在Ubuntu+Qt下的文本标刻
  • 推荐3款AIai论文大纲一键生成文献,精选整理!
  • 数据库之索引<保姆级文章>
  • 多维时序 | Matlab基于BO-LSSVM贝叶斯优化最小二乘支持向量机数据多变量时间序列预测
  • Netty笔记03-组件Channel
  • 1----安卓机型修复串码 开启端口 檫除基带 支持高通与MTK机型工具预览与操作解析