typescript - 打字稿:使用正则表达式作为类型键
问题描述
是否可以使用正则表达式作为关键属性?
这里的用例是我正在获取必须具有位置信息(纬度和经度)的数据,但我不关心大小写。
理想情况下,我可以这样声明:
interface HasPosition {
[lat: /latitude/i]: number;
[lng: /longitude/i]: number;
}
两者{ latitude: 23.5, longitude: 34.5 }
都是{ LATITUDE: 23.5, LongITUDe: 34.5 }
type HasPosition
。
这是可行的吗?它似乎可能与此有关(因为我实际上是在尝试验证作为数据点键的字符串)。我已经尝试了很多最终成为无意义语法的东西(包括上面的代码),所以我也对其他类型的解决方案持开放态度。
解决方案
你说I'm open to other types of solutions
,所以我认为一种方法是使用自定义映射器将对象转换为HasPosition
接口。
像这样的东西:
class Utils {
static MapToPosition(obj: object) : HasPosition
{
var position :HasPosition = {lat:0, lng:0};
(Object.keys(obj) as Array<keyof typeof obj>).forEach(t=>{
if((t as string).toLowerCase().includes("latitude"))
position["lat"] = obj[t];
else if((t as string).toLowerCase().includes("longitude"))
position["lng"]= obj[t];
})
return position;
}
}
var pos1 = Utils.MapToPosition({ latitude: 23.5, longitude: 34.5 });
var pos2 = Utils.MapToPosition({ LATITUDE: 23.5, LongITUDe: 34.5 });
推荐阅读
- eval - 通过 eval 提示 csh 颜色
- c# - c#在HttpResponseMessage中返回带有流(字节)的http内容
- progressive-web-apps - 如何解决 PWA Builder 上的生成错误。{"message":"未能创建您的 Web 项目","errMessage":"JSON 输入意外结束"}
- database - GoLang中带有时区的时间戳
- c# - 使用任何形状碰撞器测试一个游戏对象是否在另一个之上
- reactjs - 在 apollo reactjs 中使用变量发出请求时的问题
- flutter - l10n 迁移到零安全
- javascript - 尝试打开引脚时 PIGPIO 在 Javascript 错误中
- java - Mqtt 客户端只接收一条消息并发送一条消息,之后它什么都不做
- javascript - 用于正确显示进度条的 jquery 增强代码