千锋教育前端TypeScript入门视频教程(陆神顶配版TS入门教程)
2023-07-23 21:08 作者:bili_77199263736 | 我要投稿

1. 字面量类型
在 TypeScript 中,字面量不仅可以表示值,还可以表示类型,即字面量类型。TypeScript 支持以下字面量类型:
- 字符串字面量类型;数字字面量类型;布尔字面量类型;模板字面量类型。
(1)字符串字面量类型
字符串字面量类型其实就是字符串常量,与字符串类型不同的是它是具体的值:
type Name = "TS"; const name1: Name = "test"; // ❌ 不能将类型“"test"”分配给类型“"TS"”。ts(2322) const name2: Name = "TS";
实际上,定义单个字面量类型在实际应用中并没有太大的用处。它的应用场景就是将多个字面量类型组合成一个联合类型,用来描述拥有明确成员的实用的集合:
type Direction = "north" | "east" | "south" | "west"; function getDirectionFirstLetter(direction: Direction) { return direction.substr(0, 1); } getDirectionFirstLetter("test"); // ❌ 类型“"test"”的参数不能赋给类型“Direction”的参数。 getDirectionFirstLetter("east");
这个例子中使用四个字符串字面量类型组成了一个联合类型。这样在调用函数时,编译器就会检查传入的参数是否是指定的字面量类型集合中的成员。通过这种方式,可以将函数的参数限定为更具体的类型。这不仅提升了代码的可读性,还保证了函数的参数类型。
除此之外,使用字面量类型还可以为我们提供智能的代码提示:
(2)数字字面量类型
数字字面量类型就是指定类型为具体的数值:
type Age = 18; interface Info { name: string; age: Age; } const info: Info = { name: "TS", age: 28 // ❌ 不能将类型“28”分配给类型“18” };
可以将数字字面量类型分配给一个数字,但反之是不行的:
let val1: 10|11|12|13|14|15 = 10; let val2 = 10; val2 = val1; val1 = val2; // ❌ 不能将类型“number”分配给类型“10 | 11 | 12 | 13 | 14 | 15”。
(3)布尔字面量类型
布尔字面量类型就是指定类型为具体的布尔值(true
或false
):
let success: true; let fail: false; let value: true | false; success = true; success = false; // ❌ 不能将类型“false”分配给类型“true”
由于布尔字面量类型只有true
或false
两种,所以下面 value
变量的类型是一样的:
let value: true | false; let value: boolean;
(4)模板字面量类型
在 TypeScript 4.1 版本中新增了模板字面量类型。什么是模板字面量类型呢?它一字符串字面量类型为基础,可以通过联合类型扩展成多个字符串。它与 JavaScript 的模板字符串语法相同,但是只能用在类型定义中使用。