Vite中如何更好的使用TS

简介: 【8月更文挑战第4天】Vite中如何更好的使用TS

TS 是JS的一个类型检查工具,检查我们代码中可能会存在的一些隐形问题;同时可以使我们的编译器具备一些语法提示功能。

如果我们使用create-vue(vue3官方脚手架工具)创建了项目,该项目基于 Vite 且 TypeScript 已经准备就绪,可以直接进行TS开发。

本篇文章,我们讨论的是,任意一个安装项目中(不使用脚手架),对TS的支持情况。

Vite对TS是天生支持的

我们创建并初始化一个项目(yarn init -y),安装vite(yarn add Vite -D)。

然后,创建一下入口文件index.html, 并引入我们自定义的main.ts文件

<script src="./main.ts" type="module"></script>

main.ts文件

let tip:string = "这是一个vite项目,使用了ts语法"
console.log('tip: ', tip);

我们在终端使用vite命令启动项目,可以看到控制台输出了我们打印的内容。

image.png

在这个demo中,我们只给普通的项目安装了vite,没有安装任何ts相关的插件。

由此看见,vite已经在内部处理了对ts的支持,我们是可以直接使用的。

使用插件强化我们的能力

在一个单纯的vite项目中,vite默认是不会提示ts语法错误并阻断其编译的。

注:我们讨论的是没有使用任何脚手架的情况!

比如,我们在main.ts中将字符类型的tip赋值为数字

let tip:string = "这是一个vite项目,使用了ts语法"
tip = 2
console.log('tip: ', tip);

这样的TS语法是有问题的,但是它依旧会编译成功。

image.png

为了严格要求自己,提升代码水平,我们应该让错误输出在控制台阻止编译,强迫我们解决问题。

这一功能可以通过vite-plugin-checker来实现。

vite-plugin-checker是一个可以在工作线程中运行 TypeScript、 VLS、 vue-tsc、 ESLint的插件,它可以根据配置,阻断编译,在控制台及浏览器展示报错信息。

依赖安装

npm i vite-plugin-checker -D

根目录创建vite.config.js配置文件,并引入vite-plugin-checker

// vite.config.js
import checker from "vite-plugin-checker";
import {
   
    defineConfig } from "vite";
export default defineConfig({
   
   
  plugins: [
    checker({
   
   
      typescript: true,
    }),
  ],
});

此时直接运行 项目依旧会报错,因为还需要ts的配置文件 tsconfig.json。我们使用命令行生成

npx tsc --init

创建好tsconfig.json配置文件后,重新vite服务,会发现TS的语法报错已经被输出了

控制台輸出

image.png

浏览器输出

image.png

现在,我们只要编写出有问题的TS,vite就会报错,让我们及时发现问题并处理!真香(作死)啊!

打包前进行TS检查

Vite 仅执行 .ts 文件的转译工作,并 执行任何类型检查。这意味着,即使我们项目内有Ts的语法错误,打包也是可以正常进行的。

image.png

作为一个优秀的开发,我们怎么能允许这样的情况存在呢?

我们可以使用以下语法,在打包时进行代码检查:

  • 在构建脚本中运行 tsc --noEmit*
  • 对于.vue文件,可以安装 vue-tsc 然后运行 vue-tsc --noEmit 来对你的 *.vue 文件做类型检查

我们在package.json中配下进行验证:

// package.json
  "scripts": {
   
   
    "dev": "vite",
    // 如果ts检查不通过,vite build就不会执行
    "build": "tsc --noEmit && vite build",
  },

然后执行npm run build执行打包命令

image.png

果然,此时编译被阻断了。

tsc --noEmit的执行原理

这是ts的内置语法,和vite其实没有关系。执行tsc --noEmit时,TSC 会读取配置文件获取参数值,--noEmit的作用是只进行检查,不进行编译输出。如果我们的代码无错,会直接退出,否则报错。

TypeScript 的智能提示

对于环境变量的知识,可以参考https://juejin.cn/post/7172012247852515335

默认情况下,Vite 在 vite/client.d.ts 中为 import.meta.env 提供了类型定义。但是一些自定义的 .env[mode] 文件是木有 TypeScript 智能提示的。

要想做到这一点,我们可以在 src 目录下创建一个 env.d.ts 文件,接着按下面的方式增加定义即可:

/// <reference types="vite/client" />

interface ImportMetaEnv {
   
   
  // 自定义内容...
  readonly VITE_APP_TITLE: string
  readonly VITE_APP_HAHA: string
  readonly VITE_APP_WOCAO: string
  // 自定义内容...
}

interface ImportMeta {
   
   
  readonly env: ImportMetaEnv
}

注:必须安装模板来写,这个方法是针对所有项目的,脚手架类的项目也一样

示例:

main.ts中测试

image.png

如图,可以看到我们的智能提示已经生效了。

这里在vscode中遇到了一个报错,这只是ts的报错,和我们变量的设置是无关的。

image.png

报错问题也很简单,ts现在认为我们的项目是基于commonjs的,所以不存在import.meta属性。

image.png

我们将module的值改为“es2022”即可。

相关文章
vite环境引入web worker方法
在 vite 环境中使用 web worker 时,如果遇到生产环境中 worker.js 文件的 MIME 类型被识别为 text/html,导致报错无法运行的情况时,可以参考以下两种方法,原理都是避免编译时产出单独的 worker.js 文件。方法一worker文件不需要包装,引入时后缀增加 ?worker&inline,使用时直接 new ImportedWorker();self.
1928 1
|
前端开发 安全 JavaScript
【Message 全局提示】基于 React 实现 Message 组件
使用 ReactDOM.createRoot、React.forwardRef、React.useImperativeHandle 实现 Message 组件。使用 Web Crypto API 生成符合密码学要求的安全的随机 ID。
|
JavaScript 前端开发 API
轻松搞定Vue3+Pinia-4-多个store
轻松搞定Vue3+Pinia-4-多个store
975 0
|
自然语言处理 JavaScript
vue element plus Config Provider 全局配置
vue element plus Config Provider 全局配置
717 0
vue3+vite项目中使用svg图标
vue3+vite项目中使用svg图标
2255 1
|
9月前
|
JavaScript 安全 索引
TypeScript 高级类型工具:Partial, Required, Record 的妙用与陷阱
TypeScript 高级类型工具:Partial, Required, Record 的妙用与陷阱
|
11月前
|
前端开发 JavaScript 安全
7.6K Star Shadcn Admin:颜值与实力并存的后台管理系统,前端开发者的新宠!
"基于 Shadcn UI 和 Vite 打造的现代化管理后台,开箱即用的响应式设计 + 无障碍访问,让后台开发从未如此优雅!" —— 来自 GitHub 7.6K 星认证
2715 26
|
前端开发 JavaScript UED
React 滚动条组件 Scrollbar
本文介绍了在 React 中创建和使用滚动条组件的方法。首先,通过设置 `overflow: auto` 等 CSS 属性实现基础滚动功能。接着,推荐了如 `react-custom-scrollbars` 和 `react-perfect-scrollbar` 等第三方库以增强滚动条的功能与外观。针对常见问题,如样式不一致、无法正常工作及性能瓶颈,提供了相应的解决方案,包括自定义样式、确保容器高度和优化渲染逻辑。最后,强调了避免滚动事件绑定错误和不合理嵌套滚动的重要性,帮助开发者打造流畅、美观的用户界面。
847 16
|
JavaScript 网络架构
vue3 【提效】自动路由(含自定义路由) unplugin-vue-router 实用教程
vue3 【提效】自动路由(含自定义路由) unplugin-vue-router 实用教程
2842 0
vue3 【提效】自动路由(含自定义路由) unplugin-vue-router 实用教程

热门文章

最新文章

下一篇
开通oss服务