Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript typescript中的字符串枚举_Javascript_Typescript_Enums - Fatal编程技术网

Javascript typescript中的字符串枚举

Javascript typescript中的字符串枚举,javascript,typescript,enums,Javascript,Typescript,Enums,我希望在typescript中有一组字符串枚举,这样我就可以让用户从一组预定义的选项中进行选择 我在这个答案中找到了一个很好的解决方案: 然而,这只适用于单个单词。。。基本上,上面的代码允许您获取枚举名称值,但其中不能有空格 所以,进一步看,我发现这个人有一个解决办法: 这将允许类似的工作: export enum EventType { Photoshoot = <any>"Photoshoot", BookingMeeting = <any>"Book

我希望在typescript中有一组字符串枚举,这样我就可以让用户从一组预定义的选项中进行选择

我在这个答案中找到了一个很好的解决方案:

然而,这只适用于单个单词。。。基本上,上面的代码允许您获取枚举名称值,但其中不能有空格

所以,进一步看,我发现这个人有一个解决办法:

这将允许类似的工作:

export enum EventType {
    Photoshoot = <any>"Photoshoot",
    BookingMeeting = <any>"Booking Meeting",
    PostShootMeeting = <any>"Post Shoot Meeting",
    Purchase = <any>"Purchase",
    Print = <any>"Print"
}
唯一的回答基本上是这样做是不安全的。但我应该说,它确实有效-我可以键入EventType.dot。。。Atom editor为我提供了5个驼峰大小写选项,可以从代码中保持一致性中进行选择,然后我可以使用这些选项将字符串值吐出来,给我的用户一个很好的空间填充体验,将来我可以更改枚举和不同语言/选项的措辞,而不必完全弄乱“代码”,等等


有更好的方法吗?我不想“不安全地”这样做,但我不知道还有其他方法。

类型脚本枚举是基于数字的。可以使用具有联合类型的字符串文字来模拟基于字符串的枚举,如下面的示例所示

type CardinalDirection =
    "North"
    | "East"
    | "South"
    | "West";

function move(distance: number, direction: CardinalDirection) {
    // ...
}

move(1,"North"); // Okay
move(1,"Nurth"); // Error!
这里有更多:

字符串枚举即将出现

类型脚本枚举是基于数字的。可以使用具有联合类型的字符串文字来模拟基于字符串的枚举,如下面的示例所示

type CardinalDirection =
    "North"
    | "East"
    | "South"
    | "West";

function move(distance: number, direction: CardinalDirection) {
    // ...
}

move(1,"North"); // Okay
move(1,"Nurth"); // Error!
这里有更多:

字符串枚举即将出现

您还有其他选项,如中所述

以下是一个例子:

type EventType = "Photoshoot" | "Booking Meeting" | "Post Shoot Meeting" | "Purchase" | "Print";
const EventType {
    get Photoshoot(): EventType { return "Photoshoot"; },
    get BookingMeeting(): EventType { return "Booking Meeting"; },
    get PostShootMeeting(): EventType { return "Post Shoot Meeting"; },
    get Purchase(): EventType { return "Purchase"; },
    get Print(): EventType { return "Print"; }
}

您还有其他选项,如中所述

以下是一个例子:

type EventType = "Photoshoot" | "Booking Meeting" | "Post Shoot Meeting" | "Purchase" | "Print";
const EventType {
    get Photoshoot(): EventType { return "Photoshoot"; },
    get BookingMeeting(): EventType { return "Booking Meeting"; },
    get PostShootMeeting(): EventType { return "Post Shoot Meeting"; },
    get Purchase(): EventType { return "Purchase"; },
    get Print(): EventType { return "Print"; }
}

这是如何让我获得给我的开发人员特定的选项,而不会导致将字符串硬编码到业务逻辑代码中的?在OP解决方案中,可以将字符串photoshot更改为photoshot,而无需任何其他编码更改,因为所有业务逻辑代码都引用EventType.photoshot。在这个解决方案中,如果您想要将North更改为nerf,那么您需要在业务代码中找到North的所有用法。也许我错过了什么,但是?正在讨论未来的字符串枚举typescript@lowcrawler如果您想将North更改为nerf,只需转到代码中定义类型CardinalDirection的地方,然后将North更改为nerf。现在,编译器在每次使用North时都会给出一个错误,其中需要一个基数方向,因此您可以很容易地找到它们。@thdayturns我的错误,正如您所指出的,您将得到一个编译器错误。这如何让我获得“给开发人员特定选项”,而不会导致将字符串硬编码到业务逻辑代码中?在OP解决方案中,可以将字符串photoshot更改为photoshot,而无需任何其他编码更改,因为所有业务逻辑代码都引用EventType.photoshot。在这个解决方案中,如果您想要将North更改为nerf,那么您需要在业务代码中找到North的所有用法。也许我错过了什么,但是?正在讨论未来的字符串枚举typescript@lowcrawler如果您想将North更改为nerf,只需转到代码中定义类型CardinalDirection的地方,然后将North更改为nerf。现在,编译器在每次使用North时都会给出一个错误,其中需要一个基数方向,因此您可以很容易地找到它们。@THDAY纠正了我的错误,正如您所指出的,您将得到一个编译器错误。您可以使用静态只读字符串定义类,而不是基于此公开问题定义枚举,我认为你的变通是目前最好的办法。事实上,解决方法列在其中一条注释中。您可以使用静态只读字符串而不是枚举来定义类。基于这个公开问题,我认为您的解决方法是目前最好的方法。事实上,解决办法列在其中一条评论中。