Интерфейс Typescript для массива объекта, который имеет вложенный объект - PullRequest
0 голосов
/ 13 марта 2020

У меня есть массив объектов вроде этого:

export const EXAMPLE_CONFIG: IExampleConfig = [
 {
  urlPath: '/test/test',
  page: 'test',
  fields: {
   fullName: 'a',
   mobilePhoneNumber: 'b',
   emailAddress: 'c',
   .......
  }
 },
 {
  ... same as above
 },
]

И я создаю такой интерфейс:

export interface IExampleConfig {
  path: string;
  pageTitle: string;
  fields: { [key: string]: string };
}

Это дает мне ошибку: Тип '({путь : строка; pageTitle: строка; поля: {fullName: строка; mobilePhoneNumber: строка; emailAddress: строка; emailIsOwn: строка; mediasource: строка;};} | {путь: строка; pageTitle: строка; поля: {...; };} | ... еще 7 ... | {...;}) [] 'отсутствуют следующие свойства из типа' IExampleConfig ': путь, pageTitle, поля

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Вместо записи этого:

export interface IExampleConfig {
  path: string;
  pageTitle: string;
  fields: { [key: string]: string };
}

попробуйте это:

export interface IExampleConfig {
  path?: string;
  pageTitle?: string;
  fields?: { [key: string]?: string };
}

? - это символ Typescript, который отмечает, что атрибут интерфейса является необязательным

0 голосов
/ 13 марта 2020

Похоже, ваш тип неправильный.

Сделайте это:

export const EXAMPLE_CONFIG: IExampleConfig[]

вместо этого:

export const EXAMPLE_CONFIG: IExampleConfig

Плюс, если вы хотите сделать необязательный интерфейс, вместо того, чтобы превращать весь интерфейс в необязательный, вы можете использовать тип утилиты Typescript - Partial. Он принимает интерфейс и превращает его в дополнительный интерфейс, основанный на использовании.

Декларация:

export interface IExampleConfig {
  path: string;
  pageTitle: string;
  fields: { [key: string]: string };
}

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

let example: Partial<IExampleConfig> = { path: 'path/to/file' }

Подробнее об этом можно прочитать здесь: [https://www.typescriptlang.org/docs/handbook/utility-types.html#partialt] [1]

...