# learn-ts-vue-base **Repository Path**: hzy45/learn-ts-vue-base ## Basic Information - **Project Name**: learn-ts-vue-base - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-30 - **Last Updated**: 2026-05-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TypeScript 学习路线 > 基于 Vue 3 知识基础,由浅入深掌握 TypeScript 语法及与 Vue 3 的结合使用。 > > ⭐ = 日常开发高频使用 🔥 = Vue 3 项目核心必会 ## 运行方式 每个 .ts 文件可独立运行(.vue 文件仅作学习展示,不要求在本项目内运行): ```bash npm run 01 # 等同于 npx ts-node 01-basics.ts npm run 02 # 依此类推... npm run 03 npm run 04 npm run 06 npm run 07 npm run 08 npm run 11 ``` 类型检查: ```bash npm run check # npx tsc --noEmit npm run build # npx tsc(编译输出到 dist/) ``` > 说明:05、09、10、12 为 `.vue` 文件,仅作 Vue 3 + TS 语法展示,本项目内不提供运行脚本。 --- ## tsconfig.json 常用选项说明 | 选项 | 本项目取值 | 说明 | | ---------------------------------- | ---------- | ----------------------------------------------------------------------- | | `target` | ES2020 | 编译输出的 ECMAScript 版本 | | `module` | commonjs | 模块系统。本项目为 ts-node 学习环境;**真实 Vue 3 项目用 `esnext`** | | `lib` | ES2020/DOM | 内置类型库,`DOM` 让代码中可以使用 `window`、`document` 等 | | `strict` | true | 开启全部严格类型检查(`strictNullChecks` 等),**Vue 项目强烈建议开启** | | `esModuleInterop` | true | 让 CJS 模块可以用 `import x from 'x'` 的默认导入语法 | | `skipLibCheck` | true | 跳过 `.d.ts` 类型检查,显著加快编译速度 | | `forceConsistentCasingInFileNames` | true | 强制文件名大小写一致,避免跨平台 bug | | `resolveJsonModule` | true | 允许 `import data from './foo.json'` | | `declaration` / `sourceMap` | true | 生成 `.d.ts` 声明文件和 source map,便于调试和库开发 | --- ## 阶段 01:基础类型、接口、类型别名 **文件**:`01-basics.ts` | 知识点 | 说明 | 频率 | | ----------------- | ---------------------------------------------------------------------------------------- | ------------------ | --- | | 基础类型 | `string`、`number`、`boolean`、`null`、`undefined`、`any`、`unknown`、`symbol`、`bigint` | ⭐ | | 数组与元组 | `number[]`、`Array`、`[string, number]`、命名元组 | ⭐ | | 对象类型三种声明 | 匿名对象类型、`interface`、`type` | ⭐ | | interface vs type | 声明合并、`extends` 继承 vs 联合/交叉类型 | ⭐ | | 枚举 | 普通枚举、常量枚举 `const enum` | | | 字面量类型 | `"light" | "dark"` 精确约束值 | ⭐ | **关键要点**: - ⭐ `interface` 用于定义对象形状,`type` 用于定义任意类型的别名——**几乎每个文件都会用到** - ⭐ `?` 表示可选属性,`readonly` 表示只读——**Vue props 定义必备** - 字面量类型可以精确约束值为特定字符串/数字——**组件 variant/size 等属性常用** - 枚举适合有限的命名常量集合(但 Vue 3 项目中更常用字面量联合类型替代) --- ## 阶段 02:联合类型、交叉类型、泛型、工具类型 **文件**:`02-advanced-types.ts` | 知识点 | 说明 | 频率 | | ----------------------- | -------------------------------------------------- | ------- | | 联合类型 | `string | number` | ⭐ | | 可辨识联合 | `status` 字段区分不同响应类型 | 🔥 | | 交叉类型 | `TypeA & TypeB` 合并多个类型 | ⭐ | | 泛型基础 | `identity`、自动推断、泛型约束 `extends` | ⭐ | | 多泛型与 keyof | `merge`、`getProperty` | ⭐ | | 泛型接口与默认值 | `Repository`、`PaginatedResponse` | 🔥 | | Partial | 所有属性变可选 | 🔥 | | Pick / Omit | 选取 / 排除部分属性 | 🔥 | | Record | 键值对映射 `Record` | 🔥 | | Readonly | 所有属性变只读 | | | Required | 所有属性变必填 | | | Exclude / Extract | 从联合类型中排除 / 提取 | ⭐ | | NonNullable | 排除 `null` 和 `undefined` | ⭐ | | ReturnType / Parameters | 获取函数返回值类型 / 参数类型 | ⭐ | **关键要点**: - 🔥 **可辨识联合**是 Vue 3 组件 props 和 API 响应处理的核心模式——**几乎每个接口请求都会用到** - ⭐ 泛型让类型可复用,`extends` 约束泛型范围——**Composable 和 API 封装的基础** - ⭐ `keyof` + 泛型 = 类型安全的属性访问 - 🔥 **工具类型(Partial/Pick/Omit/Record)** 在日常开发中使用频率极高——**编辑/创建表单、API 参数类型必用** --- ## 阶段 03:函数类型、类 **文件**:`03-functions-classes.ts` | 知识点 | 说明 | 频率 | | ------------------ | -------------------------------------------- | ---- | | 函数类型 | 参数类型、返回值类型、函数类型表达式 | ⭐ | | 可选参数与默认参数 | `greeting?: string`、`greeting = "Hello"` | ⭐ | | 剩余参数 | `...numbers: number[]` | | | 函数重载 | 同一函数多种参数组合 | | | 类的访问修饰符 | `public`、`private`、`protected`、`readonly` | ⭐ | | getter / setter | 属性访问器 | ⭐ | | 参数属性简写 | 构造器参数直接声明为类属性 | ⭐ | | 继承与 override | `extends`、`super()`、`override` | | | 抽象类 | `abstract` 类和方法 | | | 类实现接口 | `implements Serializable, Comparable` | | | 静态成员与单例 | `static`、私有构造器 | | | 泛型集合类 | `Collection` | | | EventEmitter | 类型安全的事件总线 | 🔥 | --- ## 阶段 04:类型守卫、类型收窄、断言 **文件**:`04-type-guards.ts` | 知识点 | 说明 | 频率 | | ------------------- | ---------------------------- | ---- | | typeof 类型守卫 | `typeof value === 'string'` | ⭐ | | instanceof | 类的实例检查 | ⭐ | | in 操作符 | 检查对象属性是否存在 | ⭐ | | 自定义类型守卫 | `result is ApiSuccessResult` | 🔥 | | 可辨识联合 + switch | 类型穷尽检查 | 🔥 | | 类型断言 | `as Type`、`!` 非空断言 | ⭐ | | satisfies 操作符 | 类型检查但不拓宽(TS 4.9+) | ⭐ | **关键要点**: - 🔥 **可辨识联合 + switch** 是处理多种状态的核心模式 - ⭐ `satisfies` 让你既享受类型检查,又保留字面量类型推断 - ⭐ `assertNever` 函数确保所有情况都被处理 --- ## 阶段 05:Vue 3 + TypeScript 常见模式 **文件**:`05-vue3-patterns.vue` > 本章已迁移为 SFC 写法,以 `