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

news2024/12/23 17:36:45

目录

  • 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.coloradmin.cn/o/2141498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【云原生监控】Prometheus之PushGateway

Prometheus之PushGateway 文章目录 Prometheus之PushGateway介绍作用资源列表基础环境一、部署PushGateway1.1、下载软件包1.2、解压软件包1.3、编辑配置systemctl启动文件1.4、创建日志目录1.5、加载并启动1.6、监控端口1.7、访问PushGateway 二、 配置Prometheus抓取PushGate…

超声波测距

基本原理&#xff1a;超声波测距是通过发射超声波到物体表面再反射回来&#xff0c;通过测量声波传播的时间来计算距离的方法。 公式解释&#xff1a; ( L C \times T ) ( L )&#xff1a;距离&#xff08;从发射头到接收头的总距离&#xff09;( C )&#xff1a;声波的传播速…

汉王手写签批控件如何在谷歌、火狐、Edge等浏览器使用

背景 近日&#xff0c;有网友咨询汉王手写签批控件是否可以通过allWebPlugin中间件技术加载到谷歌、火狐、Edge等浏览器&#xff1f;为此&#xff0c;笔者详细了解了一下汉王手写签批控件&#xff0c;它是一个标准的ActiveX控件&#xff0c;曾经主要在IE浏览器使用&#xff0c;…

Spring为什么要用三级缓存解决循环依赖?

Spring为什么要用三级缓存解决循环依赖&#xff1f; 1. Spring是如何创建一个bean对象2. Spring三级缓存2.1 一级缓存&#xff1a;单例池&#xff0c;经历过完整bean生命&#xff0c;单例Bean对象2.2 二级缓存&#xff1a;提前暴露的Bean2.3 三级缓存&#xff1a;打破循环 3. S…

【CMake】使用CMake在Visual Studio 构建多cpp文件项目

首先&#xff0c;我们在 C m a k e Cmake Cmake文件下写入以下代码&#xff1a; #需求的最低cmake程序版本 cmake_minimum_required(VERSION 3.12)#本工程的名字 project(OpenGL)#支持的C版本 set(CMAKE_CXX_STANDARD 20)#本工程主程序文件及输出程序名称&#xff0c;生成exe …

TriangleIcon 鸿蒙ArkTS自定义View 实现带颜色的上下箭头

TriangleIcon 鸿蒙ArkTS自定义View 实现带颜色的上下箭头 最近将公司项目中VUE实现的的一个数据看板模块进行了纯血鸿蒙的实现&#xff0c;里面有个效果就是 数据指标上升 一个绿色箭头朝上&#xff0c;数据指标下降一个红色箭头向下 具体的效果可以查看上图&#xff0c; 其中V…

Vue3 项目实战甄选硅谷

1.技术选型 2.搭建Vue3 项目使用pnpm 1.安装pnpm pnpm安装 npm i -g pnpm 2.项目初始化 pnpm create vite cd ./project pnpm i pnpm run dev 初始化完成 3.项目开始之前先对项目进行一些配置 1.想让刚启动项目浏览器自动打开 找到 2.eslint配置 1.安装eslint pnpm…

FloodFill(洪水灌溉)算法专题——DFS深搜篇

1、图像渲染 . - 力扣&#xff08;LeetCode&#xff09; 1.1 算法原理 从(sr,sc)位置开始上下左右暴搜&#xff0c;将区域中符合条件的值修改为color。细节问题&#xff1a;当 color image[sr][sc]时&#xff0c;不需修改&#xff0c;直接返回即可。 1.2 算法代码 class Sol…

C++初阶:STL详解(三)——vector的介绍和使用

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 前言&#xff1a; 前面我们刚刚了解了strin…

STM32外设之LTDC/DMA2D—液晶显示(野火)

文章目录 显示屏有几种?基本参数控制?显存 LTDC 液晶控制器LTDC 结构框图LTDC 初始化结构体 LTDC_InitTypeDefLTDC 层级初始化结构体 DMA2D 图形加速器DMA2D 初始化结构体 要了解什么 屏幕是什么&#xff0c;有几种屏&#xff0c;有什么组成。 怎么控制&#xff0c;不同屏幕控…

FastGPT一站式解决方案[2-应用篇]:轻松实现RAG-智能问答系统,AI工作流、核心模块讲解

FastGPT一站式解决方案[2-应用篇]:轻松实现RAG-智能问答系统,AI工作流、核心模块讲解 1.FastGPT快速使用:基本设置、核心模块讲解 1.1 知识库设置 首先我们需要创建一个知识库。 知识库创建完之后我们需要上传一点内容。 上传内容这里有四种模式: 手动输入:手动输入问…

php部署到apach服务器上遇到的问题

php部署到apach服务器上遇到的问题 问题描述解决方案 问题描述 参考环境搭建文章&#xff1a; 链接: Windows本地搭建PHP环境 第六步的第二条中出现无法正常访问http://localhost:8888/index.php的情况。 解决方案 思路&#xff1a;之前的http://localhost:8888是可以正常访…

收购芯片设计公司Annapurna Labs后

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Linux-mysql5.7-mysql8.0安装包下载及安装教程,二合一

一、安装包下载 1、手动下载 MySQL :: Download MySQL Community Server 2、wegt下载 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 登录自己的liunx &#xff0c;复制上面的命令下载。 二、手动安装 1、上传压缩包到…

Tomcat端口号被占用

1.当启动了Tomcat后再打开idea运行web项目下的Tomcat就会报这个“Tomcat端口号被占用”错误&#xff0c;解决办法就是关闭Tomcat&#xff08;用tomcat文件里面的shutdown.bat关闭&#xff0c;也可以在exe程序里面关闭&#xff09;&#xff0c;再在idea中运行web项目下的Tomca …

华为OD机试真题-九宫格按键输入-2024年OD统一考试(E卷)

最新华为OD机试考点合集&#xff1a;华为OD机试2024年真题题库&#xff08;E卷D卷C卷&#xff09;_华为od机试题库-CSDN博客 题目描述 九宫格按键输入&#xff0c;有英文和数字两个模式&#xff0c;默认是数字模式&#xff0c;数字模式直接输出数字&#xff0c;英文模式连…

在typescript浏览器端中调用C++编写的函数,WebAssembly传递指针类型的参数,以及处理指针类型的返回值。

首先要在Cmake工程中的cmakelists.txt文件中引入Emscripten工具链&#xff1a; set(CMAKE_TOOLCHAIN_FILE "D:/CppPkg/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake")直接看C代码&#xff1a; #include <emscripten/emscripten.h> #i…

服务器——装新的CUDA版本的方法

服务器——装新的CUDA版本 一、进入 CUDA 版本列表二、根据自己服务器&#xff0c;选择对应的版本和配置三、使用管理员用户&#xff0c;运行下载和安装命令四、查看显卡驱动是否安装4.1 若安装了显卡驱动4.2 若显卡驱动没安装 参考文章 一、进入 CUDA 版本列表 CUDA Toolkit …

MFC工控项目实例之十七添加手动测试界面

承接专栏《MFC工控项目实例之十六输入信号验证》 1、在JogTest.h文件中添加代码 class CJogTest : public CDialog { public:CJogTest(CWnd* pParent NULL); // standard constructorCButtonST m_btnStart[16];CFont m_font; ... } 2、在JogTest.cpp文件中添加代码 #…

【医药行业】实施SAP有哪些医药行业GXP的合规要求和注意事项

作为实施过辉瑞和赛诺菲医药行业的项目&#xff0c;总结了如下&#xff1a; 在医药行业中&#xff0c;GxP&#xff08;Good Practices&#xff0c;良好规范&#xff09;是一系列标准与指南&#xff0c;旨在确保制药、医疗设备和生物制品的质量与合规性。GxP包括多个领域&#x…