TypeScript 枚举指南
<p><img src="https://upload-images.jianshu.io/upload_images/80097-bf425ac153c1468d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p><p>枚举是受 TypeScript 支持的数据类型。枚举允许您定义一组命名常量。使用它们可以更轻松地记录意图或创建一组不同的案例。枚举大多数用于面向对象的编程语言(如 Java 和 C#)中,现在也可以 TypeScript 中使用。它们是 TypeScript 的少数功能之一,它不是 JavaScript 的类型级扩展。接下来我将要演示 TypeScript 枚举的基础知识以及用例,各种枚举类型和学习的后续步骤。</p>
<h2 id="typescript-中的枚举是什么">TypeScript 中的枚举是什么</h2>
<p>许多编程语言(例如 C,C# 和 Java)都具有 enum 数据类型,而 JavaScript 没有。但是 TypeScript 可以,TypeScript 具有基于数字和基于字符串的枚举。TypeScript 枚举允许开发人员定义一组命名常量。使用它们可以更轻松地记录意图或创建一组不同的案例。</p>
<p>枚举的语法如下:</p>
<pre><code>enum States {
Apple,
Orange,
Banana,
Watermelon
}
// 使用
var fruit = States.Watermelon;
</code></pre>
<h2 id="在-typescript-中使用枚举需要注意什么">在 TypeScript 中使用枚举需要注意什么</h2>
<p>首先枚举中的值是常量,即枚举是类型安全的,在重新分配值时会返回编译错误。其次枚举应该是有限的,有助于用户创建一个自定义的常量系统。枚举在被编译后是一个对象:在 JavaScript 中创建内存有效的自定义常量,使用灵活易于表达记录意图方便作为判断用例。</p>
<pre><code>enum requestStatus {
success = 200
error = 400
}
</code></pre>
<pre><code>
let requestStatus;
(function (requestStatus) {
requestStatus = 200] = "success"
requestStatus = 400] = "error"
})(requestStatus || (requestStatus = {}));
// requestStatus:
// { '200': 'success', '400': 'error', error: 400, success: 200 }
</code></pre>
<h2 id="常见枚举的类型">常见枚举的类型</h2>
<p><strong>数值枚举</strong> 和 <strong>字符串枚举</strong> 是我们在 TypeScript 中最常用的枚举类型,下面我将用例子向你们介绍它们的特点以及如何使用它们。</p>
<p>** 数字枚举</p>
<p>数字枚举<strong>以字符串存储数字值</strong> 。让我们使用 enum 关键字定义它们。下面我将用存储一组不同类型汽车的示例展示 TypeScript 中的数字枚举:</p>
<pre><code>enum CarType {
Honda,
Toyota,
Subaru,
Hyundai
}
</code></pre>
<p>枚举值 CarType 有四个值:本田,丰田,斯巴鲁和现代。枚举值从 0 开始,并且每个成员的值递增 1 ,如下所示:</p>
<p>Honda = 0</p>
<p>Toyota = 1</p>
<p>Subaru = 2</p>
<p>Hyundai = 3</p>
<p>如果需要你可以自己初始化第一个数值,如下所示:</p>
<pre><code>
enum CarType {
Honda = 1,
Toyota,
Subaru,
Hyundai
}
</code></pre>
<p>在上面的示例中,Honda 使用数值 1 初始化了第一个成员。剩余的数字将加一。</p>
<p>你可能会想,如果我更改最后一个值,之前的值会根据最后定义的数值递减吗?让我们来试试:</p>
<pre><code>
enum CarType {
Honda,
Toyota,
Subaru,
Hyundai = 100
}
</code></pre>
<p>遗憾的是这是行不通的,当前例子的数值是:</p>
<pre><code>enum CarType {
Honda,// 1
Toyota, // 2
Subaru, // 3
Hyundai // 100
}
</code></pre>
<p>注意:不必为枚举成员分配顺序值。你可以为其分配任何所需的值</p>
<p><strong>字符串枚举</strong></p>
<p>字符串枚举类似于数字枚举,但是它们的<strong>枚举值是使用字符串值而不是数字值初始化的。</strong> 字符串枚举比数字枚举具有<strong>更好的可读性</strong> ,从而更容易调试程序。</p>
<p>以下示例使用与数值枚举示例相同的信息,但以字符串枚举表示:</p>
<pre><code>enum CarType {
Honda = "HONDA",
Toyota = "TOYOTA",
Subaru = "SUBARU",
Hyundai = "HYUNDAI"
}
// 访问字符串枚举
CarType.Toyota; //return TOYOTA
</code></pre>
<p>注意:字符串枚举值需要单独初始化。</p>
<h2 id="枚举反向映射">枚举反向映射</h2>
<p>枚举可以使用其相对应的枚举成员值检索 num 值。使用反向映射,可以访问成员值和成员值的名称,请看下面的例子:</p>
<pre><code>enum CarType {
Honda = 1,
Toyota,
Subaru,
Hyundai
}
CarType.Subaru; //return 3
CarType.["Subaru"]; //return 3
CarType; //return Subaru
</code></pre>
<p>CarType 由于反向映射,返回其成员名称“ Subaru”。让我们看另一个例子:</p>
<pre><code>enum CarType {
Honda = 1,
Toyota,
Subaru,
Hyundai
}
console.log(CarType)
</code></pre>
<p>在浏览器的控制台中将看到以下输出:</p>
<pre><code>{
'1':'Honda',
'2':'Toyota',
'3':'Subaru',
'4':'Hyundai',
Honda:1,
Toyota:2,
Subaru:3,
Hyundai:4
}
</code></pre>
<p>枚举的每个值在内部存储的枚举对象中出现两次。</p>
<h2 id="计算枚举">计算枚举</h2>
<p>枚举成员的值可以是常量值或计算值。请看下面的示例:</p>
<pre><code>
enum CarType {
Honda = 1,
Toyota = getCarTypeCode('toyota'),
Subaru = Toyota * 3,
Hyundai = 10
}
function getCarTypeCode(carName: string): number {
if (carName === 'toyota') {
return 5;
}
}
CarType.Toyota; // returns 5
CarType.Subaru; // returns 15
</code></pre>
<p>如果枚举既包含计算成员又包含常量成员,则未初始化的枚举成员将首先出现,也可能在其他带有数字常量的初始化成员之后。下一个示例将显示错误:</p>
<pre><code>enum CarType {
Toyota = getCarTypeCode('toyota'),
Honda, // Error: Enum member must have initializer
Subaru,
Hyundai = Toyota * 3,
}
</code></pre>
<p>你可以这样声明上述枚举:</p>
<pre><code>
enum CarType {
Honda,
Hyundai,
Toyota = getCarTypeCode('toyota'),
Subaru = Toyota * 3
</code></pre>
<p>以上就是本文的全部内容,通过讲解什么是枚举,我们在使用枚举的时候应该注意什么。到我们常用的枚举类型(数值枚举,字符串枚举),枚举反向映射,计算枚举。相信你对枚举已经有了一定的了解,如果文章有什么没有讲明白的或是有什么错误的地方欢迎指正,感激不尽。</p>
<h4 id="推荐阅读">推荐阅读</h4>
<p>加密的艺术</p>
<p>代码签名证书,让软件真正拥有姓名!</p><br><br>
来源:https://www.cnblogs.com/upyun/p/15397847.html
頁:
[1]