首页 > 解决方案 > 打字稿字符串和字符串枚举 - 字符串不可分配

问题描述

Typescript 手册并没有真正给我太多关于如何正确使用字符串枚举的信息。
是我的例子:

enum ICE_CREAM {
    strawberry = "STRAWBERRY",
    vanilla = "VANILLA"
}

type TORDER = {
    greetings: string,
    flavor: ICE_CREAM
}

const mockData: TORDER = {
    greetings: "Hello",
    flavor: "VANILLA",
}

这导致错误类型

'"VANILLA"' 不可分配给类型 'ICE_CREAM'。(2322)

我的后端将发送包含“风味”键的数据,我想确保它的值是我的ICE_CREAM字符串枚举中声明的值之一。我究竟做错了什么?

标签: typescriptenums

解决方案


根据设计,您不能将字符串分配给类型为枚举的属性。您必须引用枚举才能分配其值之一。

flavor: ICE_CREAM.vanilla

但是,使用字符串联合类型有更好的方法。这样你就可以保持你的类型强大,同时让你的字符串成为字符串。

type ICE_CREAM = 'STRAWBERRY' | 'VANILLA';

type TORDER = {
    greetings: string,
    flavor: ICE_CREAM
}

const mockData: TORDER = {
    greetings: "Hello",
    flavor: "VANILLA", // Assigns without error
}

const badMockData: TORDER = {
  greetings: "Hello",
  flavor: "vanilla", // Error: flavor can only be 'STRAWBERRY' or 'VANILLA'
}

推荐阅读