Как создать список словарей в машинописном тексте? - PullRequest
0 голосов
/ 05 мая 2020

Интуитивно можно попробовать что-то вроде:

interface Port_Mapping {
  number: Port_role
}
port_mappings: Port_Mapping[{number: Port_role}] = [];

, где Port_role - интерфейс, а число - это целочисленный ключ. Однако это встречается с:

Type '{number: Port_role; } 'нельзя использовать в качестве типа индекса.

Тогда можно попробовать изменить на:

interface Port_Mapping {
  number: Port_role
}

port_mappings: Port_Mapping[] = [];

this.port_mappings.push({5: Port_role.input})

Однако это тоже не работает, потому что номер в интерфейсе фактически имя, а не тип, и вы получите:

Аргумент типа '{5: Port_role; } 'не может быть назначен параметру типа' Port_Mapping '. Литерал объекта может указывать только известные свойства, а «5» не существует в типе «Port_Mapping».

В моем случае мне нужен список словарей, в которых каждый словарь имеет форму:

[{key1: value1, key2: value2, key3: value3}]

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Попробуйте

interface Port_Mapping {
  [index: number]: Port_role
}

[index: number] является индексатором - может использоваться только в интерфейсах и означает, что вы можете индексировать экземпляр объекта, используя его.

Ваша первая попытка не имеет особого смысла в TS, вы объявляете переменную port_mappings как имеющую тип Port_Mapping, проиндексированную с экземпляром объекта {number: Port_role}, где значением свойства number является тип интерфейса Port_role.

Во второй попытке вы пытаетесь преобразовать sh экземпляр объекта {5: Port_role.input} в массив типа Port_Mapping. Здесь вы получаете очевидное несоответствие типа, так как экземпляр объекта, который вы нажимаете, не имеет свойства number (а тип массива, в который вы вставляете (Port_Mapping), не имеет свойства с именем «5»).

Использование:

interface Dict {
  [idx: number]: string
}

const i = 5;
const dict: Dict = { 1: 'abc', [2]: 'def', [i]: 'ghi' };
dict[7] = 'jkl';
dict[i] = 'mno';
delete dict[2]; // removes the index 2: 'def' entry

const listOfDict: Dict[] = [dict, { 1: 'a', [2]: 'b', [i]: 'c'}];
listOfDict.push({ 1: 'a', [2]: 'b', [i]: 'c'});
0 голосов
/ 05 мая 2020

Вы можете использовать запись TypeScript https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...