Попробуйте
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'});