如何在打字稿中去结构枚举值? 我在打字稿中有一个枚举,如下所示: 导出枚举xmppelementname { 状态=“状态”, 存在=“存在”, iq =“ iq”, unreadCount =“ uc”,

问题描述 投票:0回答:3

想要取消结构的价值,我们如何在打字稿中进行此操作?

const { uc, ouc, msg, lsi, si, t, body } = XMPPElementName;
update

当@Amadan
,我们可以使用Mozilla Doc所说的
destructuring_assignment

,如下:

分配给新变量名称 属性可以从对象中解开包装,并分配给具有与对象属性不同的变量。

Assigning to new variable names
解决此问题非常好,但是如果您需要访问所有项目而无需明确定义它们,则可以在这两个提及的TAG1

TAG2

中进行。

const o = {p: 42, q: true};
const {p: foo, q: bar} = o;
 
console.log(foo); // 42 
console.log(bar); // true

这不起作用,因为const { uc, ouc, msg, lsi, si, t, body } = XMPPElementName; 没有名为

XMPPElementName
javascript typescript object enums destructuring
3个回答
7
投票
uc
会起作用。或者,您可以只使用与键相等的名称的变量,而不是值:

const { unreadCount: uc, otherUserUnreadCount: ouc, message: msg, lastSequenceID: lsi, sequenceID: si, timeStamp: t, body: body, } = XMPPElementName;

    
您想要枚举值对价值地图。就像您说的那样,JS中的枚举只是Pojo。您可以创建一个实用程序类型来帮助生成正确的类型。
const { unreadCount, otherUserUnreadCount, message, lastSequenceID, sequenceID, timeStamp, body, } = XMPPElementName;

游戏链接



2
投票

一种方法正在使用一个函数,该函数生成具有以下类似结构的新对象:

type EnumValueMap<T extends { [k: string]: string }> = { [K in T[keyof T]]: K } function convertEnumValuesToObject<T extends { [k: string]: string }>(enumerable: T): EnumValueMap<T> { return (Object as any).fromEntries(Object.values(enumerable).map(v => [v, v])) }

1
投票
很高兴在打字稿中看到答案吗?

这可能对寻求快速简便的任何答案的人有帮助 - 是的,您可以(至少到目前为止)。据我所知,这适用于有或没有分配值的枚举。 {value:value}enter image description here 请给我回信,如果我错了,或者在测试自己时发现任何怪异。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.