typescript - Typescript 枚举、接口和映射
问题描述
在 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 的回答,即Map是解决此类问题的最佳选择。但是,基于所描述的问题,我认为它可以简化为Map<ETypeId, string>
:
enum ETypeId {
alpha = "a",
beta = "b"
}
const types: Map<ETypeId, string> = new Map( [
[ ETypeId.alpha, "Alpha" ],
[ ETypeId.beta, "Beta" ],
]);
以防万一你想初始化你的结构并让 TypeScript 保护你不改变地图中的值:
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");
推荐阅读
- javascript - Sails.js - 从套接字数据更新变量
- javascript - “文档未定义”在 Node.js 中需要脚本时
- xcode10 - 如何为 iPhone Xs Max 横向实现分屏?
- ios - Json 解析错误:在 Swift iOS 中使用未声明的类型“Foundation”
- excel - 如何在excel中计算相对周差异。如果我在一列中有年份和星期
- javascript - 在设计 ngrx 状态时对树结构数据进行规范化/非规范化是否有意义?
- scala - Spark UDF 将列值拆分为多列
- telegram-bot - Telegram bot 无法向聊天发送内联查询
- ruby-on-rails - TypeError(没有将 nil 隐式转换为字符串) ruby on rails 5
- java - 如何在不使用 Java 中的替换功能的情况下替换字符串中的字符?