Как сохранить все выходные данные одноразового цикла for в таблицу / матрицу / массив

Я думаю, проблема в том, что вы даете вашей карте тип: Map<string, string>. Это вызвано тем, как вы создали свою карту: new Map(<[string, string][]> ...).

Это вызывает ошибку, которую вы получаете: Type 'string' is not assignable to type '"Editor" | "Console" | "Settings" | "Outputs"'

В следующем фрагменте вы пытаетесь использовать значение этой Карты, вызвав метод get с ключом. Это, однако, возвращает строку (поскольку тип вашей карты был определен как имеющий значения строки типа.

this.selectTab(TabIndex[this.tabs.get(tabParam)!]);

Оператор TabIndex[xxxx], однако, ожидает, что 'xxxx' является одним из следующих значений "Editor" | "Console" | "Settings" | "Outputs", поскольку вы можете вычесть из сообщения об ошибке выше.

Чтобы исправить это, вам нужно изменить тип своей Карты, чтобы машинописный текст знал, что «xxxx» в фрагмент выше всегда будет одним из этих значений. Для этого вам нужно создать «типы объединения этих конкретных строковых литералов». К счастью, машинопись позволяет нам извлечь из определения TabIndex.

keyof typeof TabIndex

Это разрешит «тип объединения строковых литералов», необходимый для правильного ввода Карты.

Итак, чтобы подвести итог, измените создание на карте:

const tabs = new Map(<[string, keyof typeof TabIndex][]>Object.keys(TabIndex).map((key: any) => [TabIndex[key], key]));

Это будет гарантировать, что значения из Карты, которые могут быть переданы в TabIndex [xxxx], всегда будут известным строковым литералом.

0
задан Cressie - 19 January 2019 в 14:49
поделиться