首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将对象属性值转换为枚举

如何将对象属性值转换为枚举
EN

Stack Overflow用户
提问于 2022-09-11 10:51:01
回答 1查看 24关注 0票数 0

我有这件事

代码语言:javascript
运行
复制
enum OfferType {
  Apartment = 'apartment',
  House = 'house',
  Room = 'room',
  Hotel = 'hotel',
}

当您键入属性值时,应使用哪些选项。何时应用每种方法

1)

代码语言:javascript
运行
复制
{
  type: type as OfferType
}
代码语言:javascript
运行
复制
{
  type: OfferType[type as 'apartment' | 'house' | 'room' | 'hotel']
{
EN

回答 1

Stack Overflow用户

发布于 2022-09-11 11:07:08

我将假设typestring类型的,因为您是从TypeScript代码的范围之外接收到的。

在这种情况下,我不会使用您展示的两个选项,因为它们都是假设是一个有效的OfferType,这不是一个可靠的假设。(但如果你想做出这样的假设,没有理由使用第2条,只需使用#1;操场链接。)

相反,我会使用类型谓词函数类型断言函数,它们都将type的类型缩小到OfferType ,而在运行时检查这个假设。

类型谓词:

代码语言:javascript
运行
复制
function isOfferType(value: string): value is OfferType {
    return (Object.values(OfferType) as string[]).includes(value);
}

用法:

代码语言:javascript
运行
复制
if (isOfferType(type)) {
    obj = { type };
} else {
    // Handle the fact it isn't one

操场链接

类型断言函数:

代码语言:javascript
运行
复制
function assertIsOfferType(value: string): asserts value is OfferType {
    if (!(Object.values(OfferType) as string[]).includes(value)) {
        throw new Error(`"${value}" is not a valid OfferType`);
    }
}

用法:

代码语言:javascript
运行
复制
assertIsOfferType(type);
const obj = { type };

操场链接

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73678644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档