SuperAPI AI 工具集

vue-typescript

前端与建站

查看项目

更新于 10-16 12:53

技能介绍

Vue TypeScript 是一个生产级技能,用于掌握 TypeScript 与 Vue 3 应用的集成,涵盖类型安全组件、泛型、类型推断和高级类型模式。

用途 该技能具有单一职责:教授 TypeScript 与 Vue 的集成,包括带类型的组件、泛型、类型推断以及高级类型模式。

参数结构 技能接收以下参数:

  • topic:可选值为 'config' | 'components' | 'generics' | 'stores' | 'inference' | 'all'
  • level:可选值为 'beginner' | 'intermediate' | 'advanced'
  • context(可选):包含 strict_mode(布尔值)和 existing_js(布尔值)

学习模块

模块 1:TypeScript 配置 前置要求:vue-fundamentals、TypeScript 基础。时长 1-2 小时。目标是配置 Vue 的 TypeScript 支持。涉及内容包括 tsconfig.json 的 Vue 专用配置、Volar 扩展的 IDE 支持、env.d.ts 类型声明(Vite/Vue 类型)、以及使用 vue-tsc 进行构建检查与类型验证。资料给出的 tsconfig.json 示例设置了 target 为 ESNext、module 为 ESNext、moduleResolution 为 bundler、strict 为 true、jsx 为 preserve、jsxImportSource 为 vue,并包含 src 下的 .ts 和 .vue 文件。

模块 2:带类型的组件 前置要求:模块 1。时长 3-4 小时。目标是编写类型安全的组件。涉及特性包括:Props(使用 defineProps<Props>())、Emits(使用 defineEmits<Emits>())、默认值(使用 withDefaults())、暴露(使用 defineExpose())、插槽(使用 defineSlots())。示例展示了如何定义 Props 接口和 Emits 接口,并使用 withDefaults 设置默认值,以及使用 defineEmits 定义事件。

模块 3:泛型组件 前置要求:模块 2。时长 3 小时。目标是构建可复用的泛型组件。示例使用 generic="T extends { id: string | number }" 声明泛型,定义依赖 T 的 Props 和 Emits,并在模板中遍历 items 并触发 select 事件,同时通过作用域插槽暴露 item。

模块 4:带类型的组合式函数与 Store 前置要求:模块 3。时长 3-4 小时。目标是实现类型安全的可复用逻辑。涉及模式包括:Composable 返回值(通过接口定义,示例为 useFetch)、Store state(带类型的 refs)、Getters(计算类型、派生状态)、Actions(异步类型、API 动作)。示例定义了 UseFetchReturn<T> 接口,并给出 useFetch 函数签名。

模块 5:高级类型模式 前置要求:模块 1-4。时长 3-4 小时。目标是达到专家级 Vue 类型能力。涉及模式包括:工具类型(用于 Props 提取,如 ExtractProps)、模块扩展(如路由 meta 的 RouteMeta 接口)、条件类型(如 API 响应的 ResponseType)、模板引用(组件引用如 ComponentRef)。示例给出了 ExtractProps、DeepPartial、ComponentRef 等工具类型的定义以及组件 ref 的使用方式。

校验检查点

  • 初学者检查点:为 Vue 配置 tsconfig、使用带类型的 defineProps、使用带类型的 defineEmits、修复基础类型错误。
  • 中级检查点:创建泛型组件、为 composable 返回值添加类型、为 Pinia store 添加类型、正确使用 withDefaults。
  • 高级检查点:实现工具类型、扩展路由 meta 类型、为复杂泛型添加类型、实现零 any 类型。

重试逻辑 技能配置了重试逻辑,maxAttempts 为 3,backoffMs 为 [1000, 2000, 4000],失败时动作为 simplify_type_definition。

可观测性 跟踪事件包括 type_error_fixed(数据为 error_code、file)、pattern_learned(数据为 pattern_name、complexity)、skill_completed(数据为 strict_mode、any_count)。

排错 常见问题及解决方案:defineProps 无类型(缺少泛型,添加 <Props>)、找不到模块(缺少声明,添加 env.d.ts)、泛型不工作(Vue 版本低于 3.3,需升级 Vue)、类型无法推断(复杂类型,使用显式注解)。调试步骤包括检查 Volar 是否启用、运行 vue-tsc 查看错误、验证 tsconfig 路径、检查类型导入。

单元测试模板 资料提供了基于 vitest、@vue/test-utils 的测试模板,测试 GenericList 组件能否正确渲染带类型的条目,以及能否触发带类型的 select 事件。

使用方式 通过 Skill("vue-typescript") 调用。

相关技能 vue-fundamentals(前置)、vue-composition-api(用于带类型的 composable)、vue-testing(类型安全测试)。

资源 Vue TypeScript 指南、Volar、vue-tsc、TypeScript 手册。