#typescript
Вопрос:
Можно ли использовать регулярное выражение в качестве ключевого свойства?
Пример использования здесь заключается в том, что я получаю данные, которые должны содержать информацию о местоположении (широта и долгота), но меня не волнует капитализация.
В идеале я мог бы объявить что-то вроде этого:
interface HasPosition {
[lat: /latitude/i]: number;
[lng: /longitude/i]: number;
}
Оба { latitude: 23.5, longitude: 34.5 }
и { LATITUDE: 23.5, LongITUDe: 34.5 }
были бы типом HasPosition
.
Выполнимо ли это? Возможно, это связано с этим (поскольку я, по сути, пытаюсь проверить строки, которые являются ключами точки данных). Я перепробовал много вещей, которые в конечном итоге оказываются бессмысленным синтаксисом (включая приведенный выше код), поэтому я открыт и для других типов решений.
Ответ №1:
Вы сказали 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 });