搭配 TypeScript 使用 Vue​

本文详细介绍了如何在Vue项目中使用TypeScript,包括IDE支持、配置tsconfig.json、Volar Takeover模式,以及如何为组件的props、emits、ref、reactive、computed等标注类型,提供更强大的静态类型检查和开发体验。
摘要由CSDN通过智能技术生成

IDE 支持

  1. Volar 是官方的 VSCode 扩展,提供了 Vue 单文件组件中的 TypeScript 支持,还伴随着一些其他非常棒的特性
  2. TypeScript Vue Plugin 用于支持在 TS 中 import *.vue 文件。

配置 tsconfig.json

通过 create-vue 搭建的项目包含了预先配置好的 tsconfig.json。

手动配置 tsconfig.json 时,请留意以下选项:

  • compilerOptions.isolatedModules 应当设置为 true,因为 Vite 使用 esbuild 来转译 TypeScript,并受限于单文件转译的限制。
  • 如果你在构建工具中配置了路径解析别名,例如 @/* 这个别名被默认配置在了 create-vue 项目中,你需要通过 compilerOptions.paths 选项为 TypeScript 再配置一遍。

Volar Takeover 模式

在每个项目里我们都运行了两个语言服务实例:一个来自 Volar,一个来自 VSCode 的内置服务。这在大型项目里可能会带来一些性能问题。为了优化性能,Volar 提供了一个叫做“Takeover 模式”的功能。在这个模式下,Volar 能够使用一个 TS 语言服务实例同时为 Vue 和 TS 文件提供支持

  • 在当前项目的工作空间下,用 Ctrl + Shift + P (macOS:Cmd + Shift + P) 唤起命令面板。
  • 输入 built,然后选择“Extensions:Show Built-in Extensions”。
  • 在插件搜索框内输入 typescript (不要删除 @builtin 前缀)。
  • 点击“TypeScript and JavaScript Language Features”右下角的小齿轮,然后选择“Disable (Workspace)”。
  • 重新加载工作空间。Takeover 模式将会在你打开一个 Vue 或者 TS 文件时自动启用。

defineComponent()

为了让 TypeScript 正确地推导出组件选项内的类型,我们需要通过 defineComponent() 这个全局 API 来定义组件

import {
    defineComponent } from 'vue'

export default defineComponent({
   
  // 启用了类型推导
  props: {
   
    message: String
  },
  setup(props) {
   
    props.message // 类型:string | undefined
  }
})

为组件的 props 标注类型

为了生成正确的运行时代码,传给 defineProps() 的泛型参数必须是以下之一:

  1. defineProps<{ /*… */ }>()
  2. interface Props {/* … */} defineProps()
<script setup lang="ts">
const props = defineProps<{
   
  foo: string
  bar?: number
}>()
</script>

<script setup lang="ts">
interface Props {
   
  foo: string
  bar?: number
}

const props = defineProps<Props>()
</script>

withDefaults 编译器

为 props 声明默认值的能力。这可以通过 withDefaults 编译器宏解决:

export interface
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值