Безымянные свойства

#javascript #typescript

#javascript #typescript

Вопрос:

Мне было интересно, есть ли в typescript функция безымянных свойств или ее можно достичь. Например, у меня есть объект класса T.

 class T {
    Key:any; 
    Value:any; 
}
  

Я могу использовать другую функцию, которая принимает массив объектов T и анализирует их в объект FormData. Шаблона нет, и поэтому всякий раз, когда я вызываю функцию, мне приходится вводить ключ и значение в каждый объект

 let array = [
                {Key:"id",Value:  "2"}, 
                {Key:"email",Value:  "generic"}, 
                {Key:"type",Value:"Food"}, 
                {Key:"name",Value: "someName"} 
                .......
]; 
  

Это выглядело бы намного чище и было бы более эффективным, если бы я мог просто ввести два строковых значения следующим образом

 let array = [
                {"id","2"}, 
                {"email","generic"}, 
                {"type","Food"}, 
                {"name","someName"} 
                .......
]; 
  

Может ли это быть достигнуто в typescript / javascript, если да, то как?

Комментарии:

1. Вы могли бы использовать .map() для добавления имен свойств.

2. Это не ответ на typescript, но функция map array позволяет преобразовывать каждый элемент массива во что-то другое. Вы можете использовать свой ванильный массив в качестве входных данных и выводить массив объектов пары ключ / значение.

3. Да, typescript / javascript не имеет значения. пожалуйста, дайте ссылку?

4. Я проверяю карты, но мне все равно пришлось бы сделать что-то вроде этого var x: Map<any, any> = новая карта<any, any>(); x.set(«id», «2»);

5. Было бы полезно посмотреть вашу функцию и то, как вы получаете входные данные массива. Я говорил не об объекте Map, а скорее об Array.prototype.map() . Второй пример является обратным тому, что вы хотите сделать.

Ответ №1:

Для достижения этой цели вы можете использовать типы кортежей и Array.map.

 let content = [
    ["id","2"], 
    ["email","generic"], 
    ["type","Food"], 
    ["name","someName"] 
]; 

let finalArray = content.map(([Key, Value]) => ({Key, Value}));
  

Преимущество использования типа кортежа здесь заключается в том, что если ваша спецификация содержимого содержит менее двух элементов в строке, это вызовет ошибку компиляции.

Обратите внимание, что в .map вызове я использую функции деструктурирования и определения полей в typescript.

Комментарии:

1. Я пытался включить ссылки на документацию для всего, но, похоже, нигде не могу найти документацию для каламбура o_O. Может быть, мне стоит написать что-нибудь… В любом случае, он компилируется просто отлично.