想要取消结构的价值,我们如何在打字稿中进行此操作?
const { uc, ouc, msg, lsi, si, t, body } = XMPPElementName;
update当@Amadan
,我们可以使用Mozilla Doc所说的destructuring_assignment
分配给新变量名称 属性可以从对象中解开包装,并分配给具有与对象属性不同的变量。
Assigning to new variable names
解决此问题非常好,但是如果您需要访问所有项目而无需明确定义它们,则可以在这两个提及的TAG1TAG2中进行。
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
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;
游戏链接
一种方法正在使用一个函数,该函数生成具有以下类似结构的新对象:
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]))
}
这可能对寻求快速简便的任何答案的人有帮助 - 是的,您可以(至少到目前为止)。据我所知,这适用于有或没有分配值的枚举。
{value:value}
请给我回信,如果我错了,或者在测试自己时发现任何怪异。