Почему это объявление карты выдает ошибку типа? - PullRequest
0 голосов
/ 05 ноября 2019

Я попытался объявить переменную, где каждый ключ на карте является массивом объектов. по какой-то причине при присвоении значения массиву возникает ошибка типа.

это разрешено:

var map = new Map([
            ['a', {c: 1}],
            ['b', {c: 1, d: 1}]
        ])

это запрещено:

var map = new Map([
            ['a', [{c: 1}]],
            ['b', [{c: 1, d: 1}]]
        ])

второй фрагмент кода выдаст эту ошибку: Type '{a: number;б: число;} 'нельзя назначить типу' {a: number;} '

почему разрешен первый фрагмент кода, а второй - нет? я ожидаю, что мне будут разрешены разные типы для каждого ключа моей карты

1 Ответ

1 голос
/ 05 ноября 2019

Ваши типы не соответствуют. Вы можете явно указать Map типы, которые у нее будут

interface MapValue {
  c: number;
  d?: number;
}

const map = new Map<string, MapValue[]>([
  ['a', [{ c: 1 }]],
  ['b', [{ c: 1, d: 1 }]]
])

// or

interface MapValue {
  c: number;
  d: number;
}

const map = new Map<string, MapValue[]>([
  ['a', [{ c: 1 } as MapValue]],
  ['b', [{ c: 1, d: 1}]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...