Машинопись: Использование регулярного выражения для ключей ввода

#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 });
 

Ссылка на игровую площадку