首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第 1 章 准备知识
1.1 前端技术简介
1.2 HTML入门
1.2.1 准备开发工具
1.2.2 HTML中的基础标签
1.3 CSS入门
1.3.1 CSS选择器入门
1.3.2 CSS样式入门
1.4 JavaScript入门
1.4.1 我们为什么需要JavaScript
1.4.2 JavaScript语法简介
1.4.3 从JavaScript到TypeScript
1.5 渐进式开发框架Vue
1.5.1 第一个Vue应用
1.5.2 范例:一个简单的用户登录页面
1.5.3 Vue 3的新特性
1.5.4 我们为什么要使用Vue框架
第 2 章 TypeScript基础
2.1 重新认识TypeScript
2.1.1 安装TypeScript
2.1.2 TypeScript语言版本的HelloWorld程序
2.1.3 使用高级IDE工具
2.2 TypeScript中的基本类型
2.2.1 布尔、数值与字符串
2.2.2 特殊的空值类型
2.2.3 数组与元组
2.3 TypeScript中有关类型的高级内容
2.3.1 枚举类型
2.3.2 枚举的编译原理
2.3.3 any、never与object类型
2.3.4 关于类型断言
2.4 函数的声明和定义
2.4.1 函数的类型
2.4.2 可选参数、默认参数和不定个数参数
2.4.3 函数的重载
第 3 章 TypeScript中的面向对象编程
3.1 理解与应用“类”
3.1.1 类的定义与继承
3.1.2 类的访问权限控制
3.1.3 只读属性与存取器
3.1.4 关于静态属性与抽象类
3.1.5 类的实现原理
3.2 接口的应用
3.2.1 接口的定义
3.2.2 使用接口约定函数和可索引类型
3.2.3 使用接口来约束类
3.2.4 接口的继承
3.3 TypeScript中的类型推断与高级类型
3.3.1 关于类型推断
3.3.2 联合类型与交叉类型
3.3.3 TypeScript的类型区分能力
3.3.4 字面量类型与类型别名
当前位置:
首页>>
技术小册>>
TypeScript和Vue从入门到精通(一)
小册名称:TypeScript和Vue从入门到精通(一)
### 3.3.4 字面量类型与类型别名 在TypeScript的广阔天地中,字面量类型(Literal Types)与类型别名(Type Aliases)是构建复杂、精确类型系统的基石。它们不仅增强了代码的可读性和可维护性,还使得类型检查更加严格和灵活。本节将深入探讨这两种类型的概念、用法及其在实际开发中的应用。 #### 3.3.4.1 字面量类型 字面量类型是一种特殊的类型,它直接指代了某个具体的值。在TypeScript中,字符串字面量、数字字面量、布尔字面量以及枚举成员都可以作为字面量类型使用。这种类型限制了变量的值必须严格等于声明时指定的字面量值,从而提供了一种强类型的约束方式。 ##### 字符串字面量类型 字符串字面量类型允许你指定变量只能取特定的字符串值之一。这在处理那些具有固定选项的字符串时特别有用,比如错误码、状态标识等。 ```typescript type Direction = "up" | "down" | "left" | "right"; let direction: Direction = "left"; direction = "up"; // 正确 direction = "north"; // 错误,因为 "north" 不是 "Direction" 类型的一部分 ``` ##### 数字字面量类型 数字字面量类型虽然不如字符串字面量类型常用,但在某些特定场景下,它们也能发挥重要作用,比如当某个数值具有特定的业务含义时。 ```typescript type Age = 18 | 25 | 30; let age: Age = 25; age = 30; // 正确 age = 22; // 错误,因为 22 不是 "Age" 类型的一部分 ``` ##### 布尔字面量类型 布尔字面量类型实际上在TypeScript中较为少见,因为布尔值只有两个可能的值(`true` 和 `false`),但在某些泛型编程中,它们可以用来确保类型安全。 ##### 枚举与字面量类型 枚举(Enumerations)在TypeScript中提供了一种定义一组命名常量的方式,这些常量默认就是字面量类型。 ```typescript enum Color { Red, Green, Blue } let color: Color = Color.Red; // 此时,Color.Red、Color.Green、Color.Blue 都是字面量类型 ``` #### 3.3.4.2 类型别名 类型别名是TypeScript中一种为复杂类型命名的方式。通过使用`type`关键字,我们可以给任何类型(包括联合类型、交叉类型、接口、字面量类型等)起一个别名,从而提高代码的可读性和可维护性。 ##### 基本用法 ```typescript type UserId = string; type UserDetails = { id: UserId; name: string; age: number; }; let user: UserDetails = { id: "12345", name: "John Doe", age: 30 }; ``` 在上面的例子中,`UserId` 是 `string` 类型的一个别名,而 `UserDetails` 是一个对象类型的别名,该对象包含三个属性:`id`、`name` 和 `age`。通过使用类型别名,我们可以更清晰地表达代码的意图。 ##### 复杂类型别名 类型别名不仅可以用于基础类型,还可以用于更复杂的类型组合,如联合类型、交叉类型等。 - **联合类型**: ```typescript type IdOrName = string | number; let identifier: IdOrName = "user123"; identifier = 12345; // 正确 ``` - **交叉类型**: 交叉类型允许我们将多个类型合并为一个类型,新类型将包含所有类型的特性。 ```typescript interface Person { name: string; } interface AgeInfo { age: number; } type PersonWithAge = Person & AgeInfo; let person: PersonWithAge = { name: "Alice", age: 30 }; ``` ##### 泛型与类型别名 类型别名还可以与泛型结合使用,以创建更加灵活和可复用的类型定义。 ```typescript type Nullable<T> = T | null; let name: Nullable<string> = "John"; name = null; // 正确 function findUser<T, K extends keyof T>(users: T[], key: K, value: T[K]): Nullable<T> | undefined { for (let user of users) { if (user[key] === value) { return user; } } return undefined; } interface User { id: number; name: string; } let users: User[] = [ { id: 1, name: "Alice" }, { id: 2, name: "Bob" } ]; let foundUser = findUser(users, "name", "Alice"); if (foundUser) { console.log(foundUser.name); // 输出: Alice } ``` 在这个例子中,`Nullable<T>` 是一个泛型类型别名,它表示类型 `T` 或 `null`。而 `findUser` 函数则是一个使用泛型和类型别名的例子,它允许我们根据对象的任意属性来查找用户,并返回可能是 `null` 或 `undefined` 的结果。 #### 总结 字面量类型和类型别名是TypeScript中强大的特性,它们使得我们能够以更加精确和灵活的方式定义和使用类型。字面量类型通过限制变量的取值范围,增强了代码的安全性和可读性;而类型别名则通过为复杂类型命名,简化了类型定义的复杂度,提高了代码的可维护性。通过合理运用这两种特性,我们可以构建出既安全又易于理解的TypeScript应用程序。
上一篇:
3.3.3 TypeScript的类型区分能力
该分类下的相关小册推荐:
Vue.js从入门到精通(一)
vue项目构建基础入门与实战
vuejs组件实例与底层原理精讲
VUE组件基础与实战
移动端开发指南
Vue.js从入门到精通(三)
Vue源码完全解析
TypeScript和Vue从入门到精通(五)
TypeScript和Vue从入门到精通(二)
TypeScript和Vue从入门到精通(三)
Vue.js从入门到精通(四)
TypeScript和Vue从入门到精通(四)