TS - tsconfig.json 和 tsconfig.node.json 的关系,如何在TS 中使用 JS 不报错
目录
- 1,前言
- 2,二者关系
- 2.1,使用
- 3,遇到的问题
- 3.1,TS 中使用 JS
1,前言
通过 Vite 创建的 Vue3 + TS 项目,根目录下会有 tsconfig.json
和 tsconfig.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.json
和 tsconfig.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点),
该配置项启用时,包含的一些关键编译选项:
-
strictBindCallApply
: 确保 bind, call, apply 方法的参数类型被正确地类型检查。 -
strictFunctionTypes
: 对函数类型进行严格检查,包括参数和返回值的类型。这意味着函数的参数列表和返回值类型必须完全匹配。 -
strictNullChecks
: 启用严格的空值检查。在这种模式下,TypeScript 编译器会更加严格地检查位置类型和联合类型中可能为 null 或 undefined 的位置。 -
strictPropertyInitialization
: 确保类的非 undefined 属性在构造函数中被初始化。 -
noImplicitAny
: 禁止使用隐式的 any 类型。这有助于避免类型系统的退化,确保类型被明确地声明。 -
strictTypePredicates
: 严格检查类型谓词(如 typeof, instanceof)在类型守卫中的使用。 -
noImplicitThis
: 确保 this 参数被明确地类型化,而不是隐式地推断为 any 类型。 -
alwaysStrict
: 将严格模式应用于所有输入文件,就像它们是以严格模式开始的。
所以更准确的修改,应该是增加下面配置项即可:
{"compilerOptions": {"allowJs": true}
}
以上。
参考
相关文章:

TS - tsconfig.json 和 tsconfig.node.json 的关系,如何在TS 中使用 JS 不报错
目录 1,前言2,二者关系2.1,使用 3,遇到的问题3.1,TS 中使用 JS 1,前言 通过 Vite 创建的 Vue3 TS 项目,根目录下会有 tsconfig.json 和 tsconfig.node.json 文件,并且存在引用关系…...

revisiting拉普拉斯模板
二维向量的二阶微分是Hessian矩阵,拉普拉斯算子是将两个独立的二阶微分求和,对二阶微分的近似。 我不认同冈萨雷斯的8邻域拉普拉斯模板。 MATLAB图像处理工具箱中fspecial函数’laplacian’参数给的拉普拉斯模板: 对于数字滤波器ÿ…...

深入分析计算机网络性能指标
速率带宽吞吐量时延时延带宽积往返时间RTT利用率丢包率图书推荐内容简介作者简介 速率 连接在计算机网络上的主机在数字信道上传送比特的速率,也称为比特率或数据率。 基本单位:bit/s(b/s、bps) 常用单位:kb/s&#x…...

pyflink 安装和测试
FPY Warning! 安装 apache-Flink # pip install apache-Flink -i https://pypi.tuna.tsinghua.edu.cn/simple/ Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple/ Collecting apache-FlinkDownloading https://pypi.tuna.tsinghua.edu.cn/packages/7f/a3/ad502…...
《网络故障处理案例:公司网络突然中断》
网络故障处理案例:公司网络突然中断 一、故障背景 某工作日上午,一家拥有 500 名员工的公司突然出现整个网络中断的情况。员工们无法访问互联网、内部服务器和共享文件,严重影响了工作效率。 二、故障现象 1. 所有员工的电脑…...
JavaSE:9、数组
1、一维数组 初始化 import com.test.*;public class Main {public static void main(String [] argv){int a[]{1,2};int b[]new int[]{1,0,2};// int b[]new int[3]{1,2,3}; ERROR 要么指定长度要么大括号里初始化数据算长度int[] c{1,2};int d[]new int[10];} }基本类型…...

【裸机装机系列】2.kali(ubuntu)-裸机安装kali并进行磁盘分区-2024.9最新
【前言】 2024年为什么弃用ubuntu,请参考我写的另一篇博文:为什么不用ubuntu,而选择基于debian的kali操作系统-2024.9最新 【镜像下载】 1、镜像下载地址 https://www.kali.org/get-kali/选择installer-image,进入界面下载相应的ISO文件 我…...

解决:Vue 中 debugger 不生效
目录 1,问题2,解决2.1,修改 webpack 配置2.2,修改浏览器设置 1,问题 在 Vue 项目中,可以使用 debugger 在浏览器中开启调试。但有时却不生效。 2,解决 2.1,修改 webpack 配置 通…...

Mac笔记本上查看/user/目录下的文件的几种方法
在Mac笔记本上查看/user/下的文件,可以通过多种方法实现。以下是一些常见的方法: 一、使用Finder 打开Finder:点击Dock栏中的Finder图标,或者使用快捷键Command F。 导航到用户目录: 在Finder的菜单栏中࿰…...
工程师 - ACPI和ACPICA的区别
ACPI(高级配置和电源接口)和 ACPICA(ACPI 组件架构)密切相关,但在系统电源管理和配置方面却有不同的作用。以下是它们的区别: ACPI(高级配置和电源接口) - 定义: ACPI 是…...
一文快速上手-create-vue脚手架
文章目录 初识 create-vuecreate-vue新建项目Vue.js 3 项目目录结构项目的运行和打包vite.config.js文件解析其他:webpack和Vite的区别 初识 create-vue create-vue类似于Vue CLI脚手架,可以快速创建vuejs 3项目,create-vue基于Vite。Vite支…...
笔记整理—内核!启动!—kernel部分(7)rcs文件和登录部分与密码解析
该文件的位置在/etc/init.d/rcs,前文说过这个是一个配置文件,最开始的地方首先就是PATH相关的用export导出相关的PATH做环境变量,将可执行路径导为PATH执行时就不用写全路径了,该位置的PATH路径导出了/bin、/sbin、/usr/bin、/usr…...
朴素贝叶斯 (Naive Bayes)
朴素贝叶斯 (Naive Bayes) 通俗易懂算法 朴素贝叶斯(Naive Bayes)是一种基于概率统计的分类算法。它的核心思想是通过特征的条件独立性假设来简化计算复杂度,将复杂的联合概率分布分解为特征的独立概率分布之积。 基本思想 朴素贝叶斯基于…...

高德2.0 多边形覆盖物无法选中编辑
多边形覆盖物无法选中编辑。先检查一下数据的类型得是<number[]>,里面是字符串的虽然显示没问题,但是不能选中编辑。 (在项目中排查了加载时机,事件监听…等等种种原因,就是没发现问题。突然想到可能是数据就有问题…...

时序最佳入门代码|基于pytorch的LSTM天气预测及数据分析
前言 在本篇文章,我们基于pytorch框架,构造了LSTM模型进行天气预测,并对数据进行了可视化分析,非常值得入门学习。该数据集提供了2013年1月1日至2017年4月24日在印度德里市的数据。其中包含的4个参数是平均温度(meant…...
85-MySQL怎么判断要不要加索引
在MySQL中,决定是否为表中的列添加索引通常基于查询性能的考量。以下是一些常见的情况和策略: 查询频繁且对性能有影响的列:如果某个列经常用于查询条件,且没有创建索引,查询性能可能会下降。 在WHERE、JOIN和ORDER B…...
车载软件架构 --- SOA设计与应用(中)
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...

MATLAB求解微分方程和微分方程组的详细分析
目录 引言 微分方程的定义 MATLAB求解常微分方程 参数分析: MATLAB求解偏微分方程 刚性和非刚性问题 总结 引言 微分方程在物理、工程、经济和生物等多个领域有着广泛的应用。它们用于描述系统中变量与其导数之间的关系,通过这些方程可以解释和预…...

Sybase「退役」在即,某公共卫生机构如何实现 SAP Sybase 到 PostgreSQL 的持续、无缝数据迁移?
使用 TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量替代 OGG, Kettle 等同步工具,以及基于 Kafka 的 ETL 解决方案,「CDC 流处理 数据集成」组合拳,加速仓内数据流转,帮助企业…...
如何通过Chrome浏览器轻松获取视频网站的TS文件
在当今这个信息爆炸的时代,视频内容成为了我们获取知识和娱乐的重要方式。然而,许多视频网站出于版权保护等原因,往往限制用户直接下载视频。今天,我将教你如何利用Chrome浏览器轻松下载视频网站的TS文件,甚至批量下载…...

Redis最佳实践——安全与稳定性保障之高可用架构详解
全面详解 Java 中 Redis 在电商应用的高可用架构设计 一、高可用架构核心模型 1. 多层级高可用体系 #mermaid-svg-Ffzq72Onkv7wgNKQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Ffzq72Onkv7wgNKQ .error-icon{f…...
盲盒经济2.0:数字藏品开箱是否适用赌博法规
首席数据官高鹏律师团队编著 一、年轻人的“盲盒信仰”,法律的灰色地带 近年来,“盲盒经济”从实体玩具扩展到数字藏品领域,掀起了一波全民开箱热潮。年轻人在社交平台上晒出“开箱暴击”的喜悦,平台方则以“限量发行”“价值赋…...

手机打电话时将对方DTMF数字转为RFC2833发给局域网SIP坐席
手机打电话时将对方DTMF数字转为RFC2833发给局域网SIP坐席 --局域网SIP坐席呼叫 上一篇:手机打电话时由对方DTMF响应切换多级IVR语音菜单(完结) 下一篇:安卓App识别手机系统弹授权框包含某段文字-并自动点击确定按钮 一、前言 …...

牛客小白月赛117
前言:solveABCF相对简单,D题思路简单但是实现麻烦,F题郭老师神力b( ̄▽ ̄)。 A. 好字符串 题目大意:给定字符串s,里面的字母必须大小写同时出现。 【解题】:没什么好说的࿰…...

ZigBee 协议:开启物联网低功耗通信新时代
在物联网蓬勃发展的时代,无线通信技术犹如连接万物的桥梁,而 ZigBee 协议以其独特的优势,在众多通信协议中脱颖而出,成为构建低功耗、可靠物联网网络的关键技术之一。 一、ZigBee 协议的起源与发展 ZigBee 这个名字充满了自然的灵…...
PyTorch中 torch.utils.data.DataLoader 的详细解析和读取点云数据示例
一、DataLoader 是什么? torch.utils.data.DataLoader 是 PyTorch 中用于加载数据的核心接口,它支持: 批量读取(batch)数据打乱(shuffle)多线程并行加载(num_workers)自…...

Cypress + TypeScript + Vue3
🚀 从零构建 Cypress + TypeScript + Vue3 组件测试环境【详细实战教程】 组件测试是前端开发中不可忽视的一环,它能够帮助我们在开发阶段就发现 UI 与交互逻辑问题。本文将带你手把手搭建基于 Cypress + TypeScript + Vue3 的组件测试环境,包含完整目录结构、配置文件、组…...
Allegro 输出生产数据详解
说明 用于PCB裸板的生产可以分别单独创建文件 光绘数据(Gerber)、钻孔(NC Drill)、IPC网表;或者通过ODB++或IPC2581文件(这是一个新格式),它包含生产裸板所需要的所有信息 光绘数据 Artwork Gerber 光绘数据一般包含设计中各个层面的蚀刻线路、阻焊、铅锡、字符等信…...

Apache Kafka 实现原理深度解析:生产、存储与消费全流程
Apache Kafka 实现原理深度解析:生产、存储与消费全流程 引言 Apache Kafka 作为分布式流处理平台的核心,其高吞吐、低延迟、持久化存储的设计使其成为现代数据管道的事实标准。本文将从消息生产、持久化存储、消息消费三个阶段拆解 Kafka 的核心实现原…...

数据可视化(第4、5、6次课)
Matplotlib 折线图 import numpy as np import matplotlib.pyplot as plt import matplotlib # 配置中文格式——保证图中出现中文的时候不会乱码 matplotlib.rcParams[font.sans-serif][SimHei] matplotlib.rcParams[axes.unicode_minus]False # 绘图 x np.linspace(0,2*np…...