Как инициализировать машинописную структуру данных, быстро встроенную - PullRequest
0 голосов
/ 19 января 2020

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

Итак, у меня есть этот интерфейс :

interface Dictionary<T> {
  [Key: string]: T;
}

Я хочу инициализировать это так:

data: Dictionary<string> = {
    ['key']: { a: 1, b: 2 }
  } 

Но у меня есть ошибка Type '{}' is not assignable to type 'string'

Есть идеи?

1 Ответ

2 голосов
/ 19 января 2020

{ a: 1, b: 2} не является string, но вы пытаетесь использовать его в качестве значения свойства в объекте с сигнатурой индекса [Key: string]: string (поскольку T равно string).

Если вы хотите, чтобы значение было объектом со свойствами a и b, вам необходимо использовать соответствующий тип для этого, а не string. Например:

interface Dictionary<T> {
  [Key: string]: T;
}

const data: Dictionary<{ a: number, b: number }> = {
    key: { a: 1, b: 2}
};

Или еще лучше, определите для него тип и используйте тип:

interface Dictionary<T> {
  [Key: string]: T;
}

type Example = { a: number, b: number };
const data: Dictionary<Example> = {
    key: { a: 1, b: 2}
};

Живой пример на детской площадке


Примечание 1: Нет необходимости использовать синтаксис вычисляемого свойства со строковым литералом (['key']). Просто используйте строковый литерал или литерал имени свойства.

Примечание 2:

Я искал ярлык, чтобы создать быструю структуру данных, к которой я могу получить доступ с помощью данных: ключ.

Map хорошо для этого. Или, если вам известны значения ключей заранее, определенного типа объекта или Record<K, T>.

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