首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
开篇:用正确的方式学习 TypeScript
打造 TypeScript 的开发环境
TypeScript中的原始类型与对象类型
TypeScript中的字面量类型与枚举
TypeScript中的函数重载与面向对象
TypeScript的内置类型:any、unknown、never 与类型断言
TypeScript 类型工具
TypeScript 中无处不在的泛型
TypeScript 类型系统层级:从 Top Type 到 Bottom Type
TypeScript 类型里的逻辑运算:条件类型与 infer
TypeScript 中的内置工具类型基础
TypeScript 反方向类型推导:用好上下文相关类型
TypeScript 函数类型:协变与逆变的比较
TypeScript中类型编程与类型体操的意义
TypeScript模板字符串类型
TypeScript模板字符串工具类型进阶
TypeScript类型声明、类型指令与命名空间
在 React 中愉快地使用 TypeScript:内置类型与泛型坑位
让 ESLint 来约束你的 TypeScript 代码:配置与规则集介绍
TypeScript装饰器与反射元数据
TypeScript控制反转与依赖注入
TSConfig 全解(上):构建相关配置
TSConfig 全解(下):检查相关、工程相关配置
当前位置:
首页>>
技术小册>>
TypeScript入门指南
小册名称:TypeScript入门指南
在TypeScript中,字面量类型和枚举都是用于表示一组具体的值的方式。字面量类型允许我们指定一个特定的值,而枚举允许我们列举一组相关的值。下面将详细介绍这两种类型,包括它们的用法、优点、缺点以及如何在代码中使用它们。 ----------------------- **1、字面量类型** 字面量类型是指一个特定的值,而不是任意类型的值。在TypeScript中,我们可以使用字面量类型来定义一个特定的值。例如,我们可以定义一个表示一个数字的类型,如下所示: ```javascript type One = 1; type Two = 2; ``` 在这个例子中,我们定义了两个字面量类型:One和Two。这些类型只允许分别使用数字1和数字2,而不是其他数字。 我们可以使用这些类型来限制函数的参数或返回值: ```javascript function multiplyByTwo(value: One | Two): number { return value * 2; } const result1 = multiplyByTwo(One); // 2 const result2 = multiplyByTwo(Two); // 4 const result3 = multiplyByTwo(3); // Error: Argument of type '3' is not assignable to parameter of type 'One | Two'. ``` 在这个例子中,我们定义了一个名为multiplyByTwo的函数,它接受一个参数,该参数可以是One或Two类型。函数返回参数值的两倍。在我们的示例中,我们调用函数两次,一次传递One,一次传递Two,并获得正确的结果。但是,当我们试图传递一个不是One或Two的数字时,TypeScript会抛出一个错误。 除了数字之外,字面量类型还可以用于字符串和布尔值。例如: ```javascript type Yes = true; type No = false; function sayHello(name: "Alice" | "Bob"): string { return `Hello, ${name}!`; } const result1 = sayHello("Alice"); // "Hello, Alice!" const result2 = sayHello("Bob"); // "Hello, Bob!" const result3 = sayHello("Eve"); // Error: Argument of type '"Eve"' is not assignable to parameter of type '"Alice" | "Bob"'. ``` 在这个例子中,我们定义了两个字面量类型:Yes和No,以及一个接受名为name的参数的函数。参数的类型必须是字符串“Alice”或“Bob”。如果我们传递其他字符串,TypeScript会抛出一个错误。 **优点:** - 增强类型检查。使用字面量类型,我们可以更精确地定义我们的类型,从而使TypeScript可以更好地检查我们的代码。 - 更好的自我记录。字面量类型提供了一种将值直接嵌入代码中的方式,这可以使代码更易于阅读和理解。 **缺点:** - 可读性差。在某些情况下,使用字面量类型可能会使代码变得更加冗长,从而使代码难以阅读和理解。 - 可扩展性差。在某些情况下,我们可能需要添加更多的值到类型中,而这可能需要更多的代码,并且可能会导致类型变得更加冗长。 **2、枚举** 枚举是一种将一组相关的值命名的方式。在TypeScript中,我们可以使用枚举来定义一组命名的值。例如,我们可以定义一个颜色的枚举,如下所示: ```javascript enum Color { Red, Green, Blue } ``` 在这个例子中,我们定义了一个名为Color的枚举,它包含了三个值:Red、Green和Blue。默认情况下,枚举的第一个值的索引为0,每个后续值的索引递增1。我们可以通过显式地指定索引来改变默认值: ```javascript enum Color { Red = 1, Green, Blue } ``` 在这个例子中,Red的索引是1,而Green的索引是2,Blue的索引是3。 我们可以使用枚举的值来限制函数的参数或返回值: ```javascript function getColorName(color: Color): string { switch (color) { case Color.Red: return "Red"; case Color.Green: return "Green"; case Color.Blue: return "Blue"; default: throw new Error("Invalid color."); } } const result1 = getColorName(Color.Red); // "Red" const result2 = getColorName(Color.Green); // "Green" const result3 = getColorName(4); // Error: Argument of type '4' is not assignable to parameter of type 'Color'. ``` 在这个例子中,我们定义了一个名为getColorName的函数,它接受一个参数,该参数必须是Color类型的值。函数使用switch语句来返回与参数值对应的颜色名称。当我们传递有效的枚举值时,函数将返回正确的结果。但是,当我们传递一个不是枚举值的数字时,TypeScript会抛出一个错误。 **优点:** - 可读性好。使用枚举可以使代码更易于阅读和理解,因为它提供了一组命名的值。 - 可扩展性好。在某些情况下,我们可能需要添加更多的值到类型中,使用枚举可以轻松地添加更多的值。 **缺点:** - 类型不严格。枚举的值是数字,它们在代码中的使用方式可能会导致类型错误。例如,我们可以将一个数字值分配给枚举变量,这可能会导致错误,而TypeScript不会检查这个错误。例如: ```javascript enum Color { Red, Green, Blue } let color: Color = 1; ``` 在这个例子中,我们将数字1分配给color变量,该变量的类型为Color。虽然数字1对应于枚举中的Green,但TypeScript不会检查这个错误,因此我们可能会在运行时遇到错误。 - 命名空间冲突。如果我们有两个不同的枚举,但它们具有相同的名称,则可能会导致命名空间冲突。例如: ```javascript enum Color { Red, Green, Blue } enum Size { Small, Medium, Large } function getSizeName(size: Size): string { switch (size) { case Size.Small: return "Small"; case Size.Medium: return "Medium"; case Size.Large: return "Large"; default: throw new Error("Invalid size."); } } const result1 = getSizeName(Size.Small); // "Small" const result2 = getSizeName(Color.Red); // Error: Argument of type 'Color' is not assignable to parameter of type 'Size'. ``` 在这个例子中,我们定义了两个枚举:Color和Size。当我们尝试将Color的值传递给getSizeName函数时,TypeScript会抛出一个错误,因为Color的值不能赋给Size类型的参数。 **小结** 在TypeScript中,字面量类型和枚举都是非常有用的类型工具,可以帮助我们更好地定义和约束数据。使用字面量类型和枚举可以使我们的代码更加可读和易于维护。但是,它们也有一些缺点,例如可扩展性差、可读性差、类型不严格等。因此,在使用字面量类型和枚举时,我们应该根据具体情况权衡利弊,并选择最适合我们代码的工具。
上一篇:
TypeScript中的原始类型与对象类型
下一篇:
TypeScript中的函数重载与面向对象
该分类下的相关小册推荐:
TypeScript 全面进阶指南
TypeScript开发实战
剑指TypeScript