首页 / Nuxt 4 入门教程 / TypeScript 支持

Nuxt 4 入门教程

TypeScript 支持

本教程共 50 篇 · 第 9 篇 · 更新于 2026-08-08 · 约 6 分钟阅读

NuxtNuxt4TypeScript类型安全tsconfigvue-tsc

本节目标:理解 Nuxt 如何「零配置」提供 TypeScript 支持,知道自动生成的类型放在哪、tsconfig 为什么不能手改,以及怎么开启类型检查。

很多人一听 TypeScript 就头大,觉得要先学一门语言。在 Nuxt 里不用——它对 TS 的支持几乎是「无感」的:你写普通代码,Nuxt 在背后自动生成类型,IDE 就能给你补全和报错提示。这一章讲清楚这套机制。

9-1

Nuxt 对 TypeScript 是「开箱即用」的。你完全可以用纯 JavaScript 写整个项目,不碰一行 TS。但官方强烈建议两处用 .ts 后缀:

  • nuxt.config.ts(上一章讲过,配错字段会标红)
  • 你的组合式函数、工具函数如果用 TS 写,类型检查更稳

即便如此,你也不必为了用 Nuxt 而去系统学 TypeScript。Nuxt 会自动生成类型,让你「不写类型也能享受类型提示」。

9-2

Nuxt 依赖一套自动生成的类型才能正常工作。它们存放在 .nuxt/ 目录里,在你启动开发服务器(nuxi dev)、构建(nuxi build)或手动执行 nuxi prepare 时生成。

# 手动触发类型与类型声明生成
npx nuxt prepare

生成的内容包括:自动导入(auto-imports)的类型、#imports~/#build/ 等路径别名的解析、API 路由的类型等。也就是说,你在组件里直接写 refuseFetch 而不 import,靠的就是这里生成的声明。

Warning

.nuxt/ 是自动生成的,千万别手改,也别把它提交进版本库(已在 .gitignore)。它会在每次构建时重新生成。

9-3

Nuxt 在 .nuxt/ 里生成了一份 tsconfig.json(以及拆分的 tsconfig.app.jsontsconfig.server.json 等多份),里面包含了项目推荐的 TS 配置和所有路径别名。

关键规则:不要直接编辑项目根目录的 tsconfig.json Nuxt 模块会往里注入配置,你手动改的内容很可能被下一次生成覆盖。

正确做法是:想调整 TS 行为,通过 nuxt.config.ts 里的 typescript 字段。例如你要扩展编译器选项,用 nuxt.config.ts 的对应项,而不是去碰 tsconfig.json

Tip

VS Code 里如果类型提示不生效,先跑一次 nuxi devnuxi prepare 让类型生成出来,再重新打开编辑器,通常就好。

9-4

Nuxt 用 TypeScript 的「项目引用」把代码拆成多个类型上下文,提升检查速度和 IDE 性能。它会生成几份细分配置:

  • .nuxt/tsconfig.app.jsonapp/ 目录下的应用代码
  • .nuxt/tsconfig.server.json:服务端代码(如 server/
  • .nuxt/tsconfig.node.jsonnuxt.config.ts 等构建期文件
  • .nuxt/tsconfig.shared.json:前后端共享代码

这样做的好处:类型检查更快(没改的部分不用重检)、IDE 补全更灵敏、某个上下文出错不会拖垮整个项目。

Note

旧版 Nuxt 还生成单一的 .nuxt/tsconfig.json 做兼容。新项目建议直接用上面那些细分文件(项目引用),旧的那份未来会被移除。

9-5

因为代码被分成了多个类型上下文,你要在正确的目录里扩展类型,否则 TS 识别不到。规则很简单:

  • app 上下文加类型 → 文件放 app/ 目录里
  • server 上下文加类型 → 文件放 server/ 目录里
  • 给前后端共享的类型 → 放 shared/ 目录里

举个例子,想在 app 端补充一个全局类型,就在 app/ 下建声明文件,Nuxt 会自动把它纳入 app 上下文。

9-6

默认情况下,为了性能,nuxi devnuxi build 不会自动跑类型检查。你写错类型时,IDE 会标红,但命令本身不报错。

如果想在构建或开发时强制检查,先装两个开发依赖:

npm install --save-dev vue-tsc typescript

然后手动检查:

npx nuxt typecheck

或者让它在构建/开发时自动跑,在 nuxt.config.ts 里开:

export default defineNuxtConfig({
  typescript: {
    typeCheck: true,
  },
})
Tip

新手建议先别开 typeCheck: true,否则一开始类型报错会打断开发节奏。等代码写得差不多了,再跑 nuxi typecheck 一次性清理。

9-7

Nuxt 在开启 typeCheck 时默认启用 TypeScript 的严格检查(strict),能抓出更多隐患。但如果你正把老 JS 代码迁到 TS,可以先关掉 strict 过渡:

export default defineNuxtConfig({
  typescript: {
    strict: false,
  },
})

等类型补全得差不多了,再改回 true

9-8

前面第 12 章会系统讲 props,这里先说 TS 怎么让它更稳。组件用 <script setup lang="ts"> 时,配合 defineProps 的泛型写法,传进来的值就有类型了:

<script setup lang="ts">
const props = defineProps<{
  title: string
  likes: number
}>()
// 下面用 props.title、props.likes 都有提示和检查
</script>

这样父组件传错类型(比如把 likes 传成字符串),IDE 会直接标红,不用等运行时才发现问题。

Tip

不用 TS 也能写 Nuxt,但给 props、组合式函数的参数加类型是 TS「性价比最高」的一处:改动一处类型,所有用到它的地方立刻同步报错,比靠记忆维护稳得多。

9-9

刚开类型检查时,报错可能刷一堆。两条实用建议:

  • 从第一条看起:TypeScript 经常「一条错引发一串错」,改掉最上面的那个,下面常跟着消失。
  • 先别追求 strict 全绿:迁移或初学阶段把 typescript.strictfalse,先让项目跑起来,再一点点补类型。
Note

类型标红但项目照常运行,是正常的——类型检查是「帮你提前发现问题」,不影响 Nuxt 执行。别因为一堆红线就以为程序坏了。想确认代码真的能过类型,单独跑 npx nuxt typecheck 看完整报告。

9-10

Nuxt 的 TypeScript 是「零配置享受」:自动生成类型、路径别名开箱即用,tsconfig 由框架统管不要手改。需要强校验时装 vue-tscnuxi typecheck,迁移老代码可临时关 strict。下一章起,我们进入 Vue 3 基础,这是写好 Nuxt 组件的地基。

9-10 TypeScript 在 Nuxt 生态中的位置

Nuxt 对 TypeScript 的支持不是”勉强能用”,而是”深度集成”。Nuxt 自身的源码就用 TypeScript 编写,自动生成的类型定义覆盖了大部分 API。当你使用 useFetchuseState 等组合式函数时,TypeScript 能推断出返回值的类型,减少手动标注的工作量。

社区里越来越多的 Nuxt 模块开始提供原生 TypeScript 支持。安装一个模块后,它的类型定义会自动被 Nuxt 识别,你在代码里使用时就能获得完整的类型提示。这种体验在纯 JavaScript 项目中是无法实现的。

如果你在团队中推行 TypeScript,建议从严格模式开始。虽然初期会多花一些时间处理类型报错,但它能在编译期就捕获大量潜在 bug。对于大型项目来说,TypeScript 的类型安全是值得投入的。

9-11 常见的类型报错及解决方法

初学 TypeScript 时,最常遇到的报错之一是”类型不可分配”。这通常是因为你给一个变量赋了和声明时不同类型的值。解决方法是检查变量的类型声明是否正确,或者用联合类型(如 string | number)扩大允许的范围。

另一个常见报错是”属性不存在”。当你访问一个对象的属性但 TypeScript 认为该属性可能不存在时,就会报这个错。解决方法是先用可选链操作符(?.)安全访问,或者给对象加上正确的类型定义。在 Nuxt 项目里,大部分 API 的类型定义已经由框架自动生成,你只需要确保使用方式正确即可。