Typescript 枚举

105 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情 Johnny Enums 是 Enumerations 的缩写,是预设的常量,可以由开发人员定义,以在代码的其他地方使用。

对于 Javascript 开发人员来说,枚举的概念可能是第一次听到,但是枚举本身是很简单的。

如何定义枚举

在Typescript 中使用 Enum 关键字在定义。这是一个例子:

enum Pet {
    Dog,
    Cat,
    Goldfish,
    Skeleton
}

默认情况下,这些值中的每一个都将被分配一个数字。Dog 将为 0,Cat 为 1,依此类推。假设我们有一个生成宠物的函数。之前,我们可能会这样写:

// Generate a Cat
generatePet(1);

现在,我们可以为我们正在做的事情添加上下文,并使用我们的枚举列表来做到这一点:

// Generate a Cat
generatePet(Pet.Cat);

上面的代码等同于我们之前所做的,只是我们使用了我们的枚举。

所以等等..为什么要使用枚举?枚举本质上允许我们为我们正在做的事情提供更多的上下文。我们可以简单地要求他们使用枚举列表,而不是让用户记住可能的宠物编号列表。这也让下一个阅读我们代码的人更好地了解我们正在尝试做什么。

数字和字符串枚举

我们可以将枚举定义为数字或字符串。

enum Pet {
    Dog = 2,
    Cat,
    Goldfish,
    Skeleton
}

上面,我们给 Dog 一个数值 2。之后的每一项都会增加 1,所以 Cat 变为 3,Goldfish 变为 4等等,w我们也可以随意定义它们:

enum Pet {
    Dog = 2,
    Cat = 9,
    Goldfish = 15,
    Skeleton = 44
}

通常我们不会混合字符串和数字以避免混淆,但我们也可以将枚举定义为完全字符串:

enum Counting {
    One = "one",
    Two = "two",
    Three = "three"
}

来自函数的枚举值

枚举也可以是返回值的函数。如果只在枚举中定义一个值,则函数必须放在最后。如果将函数放在开头,则所有枚举都需要值。因此,以下会引发错误:

// This will throw an error, since the function is at the start
// So typescript assumes all will be functions
enum Counting {
    One = getOne(),
    Two,
    Three,
}

但这不会:

enum Counting {
    One,
    Two,
    Three = getThree(),
}

在上面的 One 中返回0,Two返回1,并且 Three 返回getThree() 的值。举个例子,我们的getThree()函数可能看起来像这样(返回值 3):

const getThree = function() {
    return 3;
}

计算枚举 可以计算枚举(即计算),或者也可以引用其他枚举。例如:

enum FirstEnum {
    One,   // Returns "0"
    Two,   // Returns "1"
    Three  // Returns "2"
}

enum AnotherEnum {
    One: FirstEnum.One, // returns FirstEnum.One, i.e. "0"
    Two: 1 + 1,         // Calculates and returns "2"
    Three: 1 * 3,       // Calculates and returns "3"
    Star: One           // Refers to AnotherEnum.One, returns "0"
}

结论

枚举是typescript中为代码添加更多语义的强大方式。它们为我们提供了一种好方法,让阅读您的代码的人知道您想要完成什么,从而提高所编写内容的可维护性。它们还允许您在代码库中引用标准常量。