是否可以使用正则表达式作为关键属性?
这里的用例是我获取的数据必须包含位置信息(纬度和经度),但我不关心大小写。
理想情况下,我可以声明如下:
interface HasPosition {
[lat: /latitude/i]: number;
[lng: /longitude/i]: number;
}
{ latitude: 23.5, longitude: 34.5 }
和 { LATITUDE: 23.5, LongITUDe: 34.5 }
都是 HasPosition
类型。
这可行吗?它似乎可能与 this 相关(因为我本质上是在尝试验证作为数据点键的字符串)。我尝试了很多最终都是无意义的语法(包括上面的代码),所以我也愿意接受其他类型的解决方案。
答案 0 :(得分:0)
您说的是 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 });