gpt4 book ai didi

Typescript 枚举、接口(interface)和映射

转载 作者:搜寻专家 更新时间:2023-10-30 20:41:47 25 4
gpt4 key购买 nike

在 TypeScript 中,在数组或类似数据结构中,如何将字符串映射到 id,同时确保只允许特定范围的 id?

这是我想做的。这很好用。但是,我想知道是否有更简洁的方法来实现这一点?

enum ETypeId {
alpha = "a",
beta = "b",
gamma = "g"
}

interface IType {
id: ETypeId,
title: string,
}

myTypes: IType[] = [
{ id: ETypeId.alpha, title: "Alpha" },
{ id: ETypeId.beta, title: "Beta" },
{ id: ETypeId.gamma, title: "Gamma" }
];

照原样,我必须执行以下操作才能从 id 获取 title:

function getTypeForTypeId( typeId: ETypeId ): IType {
return myTypes.find( type => type.id == typeId );
}

我能否使用不同的数据结构使上面的一些代码更简洁,或者这已经很好了?


解释:

  • “a” 是存储在我的数据库中的内容
  • ETypeId.alpha 是我在代码中访问它的方式
  • “Alpha” 是显示给用户的内容。

最佳答案

同意Sergi Dote Teixidor's回答Map是此类问题的最佳选择。但是,根据所描述的问题,我认为它可以简化为 Map<ETypeId, string> :

enum ETypeId {
alpha = "a",
beta = "b"
}

const types: Map<ETypeId, string> = new Map( [
[ ETypeId.alpha, "Alpha" ],
[ ETypeId.beta, "Beta" ],
]);

以防万一你想初始化你的结构并让 TypeScript 保护你不改变你的 map 中的值:

enum ETypeId {
alpha = "a",
beta = "b"
}

interface ReadonlyMap<TKey, TValue> {
get(key: TKey):TValue;
}

const types: ReadonlyMap<ETypeId, string> = new Map( [
[ ETypeId.alpha, "Alpha" ],
[ ETypeId.beta, "Beta" ],
]);

// Static analyzer error if you try to change the value:
types.set(ETypeId.alpha, "NewValue");

关于Typescript 枚举、接口(interface)和映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50065649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com