Vue3 + Vite 项目引入 Typescript

news2024/11/22 0:00:26

文章目录

    • 一、TypeScript简介
    • 二、TypeScript 开发环境搭建
    • 三、编译方式
      • 1. 自动编译单个文件
      • 2. 自动编译整个项目
    • 四、配置文件
      • 1. compilerOptions
        • 基本选项
        • 严格模式相关选项(启用 strict 后自动包含这些)
        • 模块与导入相关选项
      • 2. include 和 exclude
        • include
        • exclude
      • 3. files
      • 4. extends
      • 5. 总结
    • 五、Vue3 + Vite 项目中引入 Typescript
      • 1. 初始化 TypeScript
        • 安装 TypeScript
        • 生成 tsconfig.json
      • 2. 替换文件扩展名
      • 3. 添加类型定义文件
      • 4. 配置构建工具支持 TypeScript
      • 5. 在项目中使用 TypeScript
      • 6. 构建和运行项目
        • 编译 TypeScript
        • 运行项目
    • 六、报错处理
      • 1. .ts 文件中引入 .vue 文件报错
        • 问题
        • 解决方法

一、TypeScript简介

  1. TypeScript 是 JavaScript 的超集。
  2. 它对 JS 进行了扩展,向 JS 中引入了类型的概念,并添加了许多新的特性。
  3. TS 代码需要通过编译器编译为 JS,然后再交由 JS 解析器执行。
  4. TS 完全兼容 JS,换言之,任何的 JS 代码都可以直接当成 TS 使用。
  5. 相较于 JS 而言,TS 拥有了静态类型,更加严格的语法,更强大的功能;TS 可以在代码执行前就完成代码的检查,减小了运行时异常的出现的几率;TS 代码可以编译为任意版本的 JS 代码,可有效解决不同 JS 运行环境的兼容问题;同样的功能,TS 的代码量要大于 JS,但由于 TS 的代码结构更加清晰,变量类型更加明确,在后期代码的维护中 TS 却远远胜于 JS。

二、TypeScript 开发环境搭建

  1. 下载Node.js
    • 64位:https://nodejs.org/dist/v14.15.1/node-v14.15.1-x64.msi
    • 32位:https://nodejs.org/dist/v14.15.1/node-v14.15.1-x86.msi
  2. 安装 Node.js
  3. 使用 npm 全局安装 typescript
    • 进入命令行
    • 输入:npm i -g typescript
  4. 创建一个 ts 文件
  5. 使用 tsc 对 ts 文件进行编译
    • 进入命令行
    • 进入 ts 文件所在目录
    • 执行命令:tsc xxx.ts

三、编译方式

1. 自动编译单个文件

编译文件时,使用 -w 指令后,TS 编译器会自动监视文件的变化,并在文件发生变化时对文件进行重新编译。

tsc xxx.ts -w

2. 自动编译整个项目

如果直接使用 tsc 指令,则可以自动将当前项目下的所有 ts 文件编译为 js 文件。但是能直接使用 tsc 命令的前提是,要先在项目根目录下创建一个 ts 的配置文件 tsconfig.json。
tsconfig.json 是一个 JSON 文件,添加配置文件后,只需 tsc 命令即可完成对整个项目的编译

四、配置文件

tsconfig.json 是 TypeScript 的核心配置文件,用于指定编译器选项、文件范围以及类型检查的规则。下面是 tsconfig.json 中常用配置项及其含义的详细解释:
主要配置项

1. compilerOptions

compilerOptions 是 TypeScript 编译器选项的核心部分,控制编译行为。

基本选项
配置项含义常见值
target指定编译后的 JavaScript 目标语言标准ES5ES6ES2017ESNext
module指定模块系统CommonJSESNextAMDUMD
moduleResolution模块解析策略nodeclassic
lib指定要包含的库文件DOMES2015ESNext
allowJs是否允许编译 .js 文件truefalse
checkJs是否对 .js 文件进行类型检查truefalse
outDir指定编译后输出文件的目录例如 ./dist
rootDir指定输入文件的根目录例如 ./src
strict启用所有严格类型检查选项(开启后相当于开启多种子选项)truefalse
sourceMap是否生成 .map 文件,方便调试truefalse
declaration是否生成 .d.ts 类型声明文件truefalse
严格模式相关选项(启用 strict 后自动包含这些)
配置项含义默认值
strictNullChecks严格检查空值(null 和 undefined)true
noImplicitAny禁止隐式的 any 类型true
noImplicitThis禁止隐式的 this 类型true
alwaysStrict在每个文件中添加 “use strict”;true
模块与导入相关选项
配置项含义默认值
esModuleInterop允许 CommonJS 和 ESModule 之间的兼容导入truefalse
resolveJsonModule是否允许导入 .json 文件truefalse
isolatedModules启用模块的隔离编译模式(适用于工具链如 Babel)truefalse
baseUrl设置模块解析的根目录,结合 paths 配置别名路径例如 ./src
paths设置模块路径别名例如 { "@/*": ["src/*"] }

2. include 和 exclude

include

定义希望被编译文件所在的目录。默认值:[“**/*”]。** 表示任意目录,* 表示表示任意文件

// 所有src目录和tests目录下的文件都会被编译  
"include":["src/**/*", "tests/**/*"] 
exclude

定义需要排除在外的目录。默认值:[“node_modules”, “bower_components”, “jspm_packages”]

  // src下hello目录下的文件都不会被编译
  "exclude": ["./src/hello/**/*"]

❗❗❗注意:如果 include 和 exclude 都未设置,默认包含所有非 node_modules 的文件。

3. files

指定被编译文件的列表,只有需要编译的文件少时才会用到。列表中的文件都会被 TS 编译器所编译。

  "files": [
    "core.ts",
    "sys.ts",
    "types.ts",
    "scanner.ts",
    "parser.ts",
    "utilities.ts",
    "binder.ts",
    "checker.ts",
    "tsc.ts"
  ]

4. extends

定义继承另一个配置文件的选项,便于共享和复用配置。可覆盖部分选项。

// 当前配置文件中会自动包含config目录下base.json中的所有配置信息
"extends": "./configs/base"

5. 总结

  • compilerOptions:控制编译器行为,是核心配置。
  • include 和 exclude:决定编译器处理哪些文件。
  • extends 和 references:支持配置复用和多项目架构。
  • 根据项目需求调整配置,既可以提升开发效率,也能保证代码质量!

五、Vue3 + Vite 项目中引入 Typescript

1. 初始化 TypeScript

安装 TypeScript

在项目目录下安装 TypeScript:

npm install typescript --save-dev
生成 tsconfig.json

运行以下命令生成 TypeScript 配置文件:

npx tsc --init

这会生成一个默认的 tsconfig.json 文件。可以根据需要修改配置,比如:

{
  "compilerOptions": {
    // 基本选项
    "target": "ESNext", // 编译的 js 版本
    "useDefineForClassFields": true, // 此标志用于迁移到即将推出的类字段标准版本,target is ES2022 or higher
    "lib": ["ESNext", "DOM"], // 编译过程中需要引入的库文件的列表
    "skipLibCheck": true, // 跳过默认库声明文件的类型检查
    "module": "ESNext", // 指定生成哪个模块系统代码
    "moduleResolution": "Node", // 决定如何处理模块
    "noEmit": true, // 不生成输出文件
    "jsx": "preserve", // 在 .tsx文件里支持JSX
    // "types": ["vitest/globals", "element-plus/global"], // 要包含的类型声明文件名列表
    // 严格模式相关
    "strict": true, // 启用所有严格类型检查选项
    "strictPropertyInitialization": false, // 确保类的非 undefined 属性已经在构造函数里初始化
    // 模块导入相关
    "isolatedModules": false, // 将每个文件作为单独的模块
    "esModuleInterop": true, // 允许 CommonJS 和 ESModule 之间的兼容导入
    "resolveJsonModule": true, // 是否允许导入 .json 文件
    "baseUrl": ".", // 解析非相对模块名的基准目录
    "paths": {
      "@": ["src"],
      "@/*": ["src/*"],
      "@tests/*": ["tests/*"]
    } // 设置基于 baseUrl 的模块别名
  },
  "include": [
    "src/**/*.ts",
    "**/*.d.ts",
    "src/**/*.vue",
    "src/types",
    "types/*.ts",
    "auto-imports.d.ts",
  ], // 包含目录 
  "references": [{ "path": "./tsconfig.node.json" }]
}

2. 替换文件扩展名

将项目中的文件扩展名从 .js 改为 .ts(或者 .tsx,如果是 React 项目)。

3. 添加类型定义文件

为了确保第三方库在 TypeScript 中工作正常,需要安装类型定义包:

npm install @types/node --save-dev
npm install @types/react @types/react-dom --save-dev # 如果是 React 项目

对于使用的其他库,也可以安装对应的类型定义包(通常以 @types/库名 的形式存在):

npm install @types/lodash --save-dev # Lodash 的类型定义

4. 配置构建工具支持 TypeScript

  • Vite 项目
    Vite 原生支持 TypeScript,无需额外配置,只需确保文件扩展名为 .ts 或 .tsx。

5. 在项目中使用 TypeScript

6. 构建和运行项目

编译 TypeScript

运行以下命令,使用 TypeScript 编译器进行构建:

npx tsc
运行项目

如果你的项目包含打包工具(如 Webpack 或 Vite),运行相关命令即可:

npm run build
npm run dev

六、报错处理

1. .ts 文件中引入 .vue 文件报错

问题

在这里插入图片描述

解决方法

创建一个 env.d.ts 文件对 .vue 文件进行类型声明
在这里插入图片描述
在全局 tsconfig.json 中包含该 env.d.ts 文件
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2244971.html

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

相关文章

Cyberchef使用功能之-多种压缩/解压缩操作对比

cyberchef的compression操作大类中有大量的压缩和解压缩操作,每种操作的功能和区别是什么,本章将进行讲解,作为我的专栏《Cyberchef 从入门到精通教程》中的一篇,详见这里。 关于文件格式和压缩算法的理论部分在之前的文章《压缩…

Istio分布式链路监控搭建:Jaeger与Zipkin

分布式追踪定义 分布式追踪是一种用来跟踪分布式系统中请求的方法,它可以帮助用户更好地理解、控制和优化分布式系统。分布式追踪中用到了两个概念:TraceID 和 SpanID。 TraceID 是一个全局唯一的 ID,用来标识一个请求的追踪信息。一个请求…

Linux修改/etc/hosts不起作用(ping: xxx: Name or service not known)的解决方法——开启NSCD

​ 问题描述 起因是我在实验室云资源池的一台虚拟机(CentOS 8.5)上的/etc/hosts文件中为Fabric网络节点的域名指定了IP: IP可以ping通,但是ping域名时提示ping: xxx: Name or service not known。 问题本身应该是Linux通用的&a…

Python中Tushare(金融数据库)入门详解

文章目录 Python中Tushare(金融数据库)入门详解一、引言二、安装与注册1、安装Tushare2、注册与获取Token 三、Tushare基本使用1、设置Token2、获取数据2.1、获取股票基础信息2.2、获取交易日历2.3、获取A股日线行情2.4、获取沪股通和深股通成份股2.5、获…

【网络】网络抓包与协议分析

网络抓包与协议分析 一. 以太网帧格式分析 这是以太网数据帧的基本格式,包含目的地址(6 Byte)、源地址(6 Byte)、类型(2 Byte)、数据(46~1500 Byte)、FCS(4 Byte)。 Mac 地址类型 分为单播地址、组播地址、广播地址。 单播地址:是指第一个字节的最低位…

RabbitMQ的工作队列在Spring Boot中实现(详解常⽤的⼯作模式)

上文着重介绍RabbitMQ 七种工作模式介绍RabbitMQ 七种工作模式介绍_rabbitmq 工作模式-CSDN博客 本篇讲解如何在Spring环境下进⾏RabbitMQ的开发.(只演⽰部分常⽤的⼯作模式) 目录 引⼊依赖 一.工作队列模式 二.Publish/Subscribe(发布订阅模式) …

python学习_3.正则表达式

来源:B站/麦叔编程 1. 正则表达式的7个境界 假设有一段文字: text 身高:178,体重:168,学号:123456,密码:9527要确定文本中是否包含数字123456,我们可以用in运算符,也可以使用inde…

Python学习------第十天

数据容器-----元组 定义格式,特点,相关操作 元组一旦定义,就无法修改 元组内只有一个数据,后面必须加逗号 """ #元组 (1,"hello",True) #定义元组 t1 (1,"hello") t2 () t3 tuple() prin…

nodejs基于微信小程序的云校园的设计与实现

摘 要 相比于传统的校园管理方式,智能化的管理方式可以大幅提高校园的管理效率,实现了云校园管理的标准化、制度化、程序化的管理,有效地防止了云校园信息的不规范管理,提高了信息的处理速度和精确度,能够及时、准确地…

Excel——宏教程(精简版)

一、宏的简介 1、什么是宏? Excel宏是一种自动化工具,它允许用户录制一系列操作并将其转换为VBA(Visual Basic for Applications)代码。这样,用户可以在需要时执行这些操作,以自动化Excel任务。 2、宏的优点 我们可以利用宏来…

绿光一字线激光模组:工业制造与科技创新的得力助手

在现代工业制造和科技创新领域,绿光一字线激光模组以其独特的性能和广泛的应用前景,成为了不可或缺的关键设备。这种激光模组能够发射出一条明亮且精确的绿色激光线,具有高精度、高稳定性和长寿命的特点,为各种精密加工和测量需求…

Python Turtle绘图:重现汤姆劈树的经典瞬间

Python Turtle绘图:重现汤姆劈树的经典瞬间 🦀 前言 🦀🐞往期绘画🐞🐋 效果图 🐋🐉 代码 🐉 🦀 前言 🦀 《汤姆与杰瑞》(Tom and Jerr…

Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(二)

Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案https://blog.csdn.net/shijianduan1/article/details/133386281 某业务配置表,按配置的时间区间及组织层级取方案,形成报表展示出所有部门方案的取值; 例如&#xff0…

DataGear 5.2.0 发布,数据可视化分析平台

DataGear 企业版 1.3.0 已发布,欢迎体验! http://datagear.tech/pro/ DataGear 5.2.0 发布,图表插件支持定义依赖库、严重 BUG 修复、功能改进、安全增强,具体更新内容如下: 重构:各模块管理功能访问路径…

详解八大排序(一)------(插入排序,选择排序,冒泡排序,希尔排序)

文章目录 前言1.插入排序(InsertSort)1.1 核心思路1.2 实现代码 2.选择排序(SelectSort)2.1 核心思路2.2 实现代码 3.冒泡排序(BubbleSort)3.1 核心思路3.2 实现代码 4.希尔排序(ShellSort&…

02 —— Webpack 修改入口和出口

概念 | webpack 中文文档 | webpack中文文档 | webpack中文网 修改入口 webpack.config.js (放在项目根目录下) module.exports {//entry设置入口起点的文件路径entry: ./path/to/my/entry/file.js, }; 修改出口 webpack.config.js const path r…

《InsCode AI IDE:编程新时代的引领者》

《InsCode AI IDE:编程新时代的引领者》 一、InsCode AI IDE 的诞生与亮相二、独特功能与优势(一)智能编程体验(二)多语言支持与功能迭代 三、实际应用与案例(一)游戏开发案例(二&am…

ubuntu 16.04 中 VS2019 跨平台开发环境配置

su 是 “switch user” 的缩写,表示从当前用户切换到另一个用户。 sudo 是 “superuser do” 的缩写,意为“以超级用户身份执行”。 apt 是 “Advanced Package Tool” 的缩写,Ubuntu中用于软件包管理的命令行工具。 1、为 root 用户设置密码…

[Docker#11] 容器编排 | .yml | up | 实验: 部署WordPress

目录 1. 什么是 Docker Compose 生活案例 2. 为什么要使用 Docker Compose Docker Compose 的安装 Docker Compose 的功能 使用步骤 核心功能 Docker Compose 使用场景 Docker Compose 文件(docker-compose.yml) 模仿示例 文件基本结构及常见…

C++时间复杂度与空间复杂度

一、时间复杂度(Time Complexity) 1. 概念 时间复杂度是用来衡量算法运行时间随着输入规模增长而增长的量级。它主要关注的是算法执行基本操作的次数与输入规模之间的关系,而非具体的运行时间(因为实际运行时间会受硬件、编程语…