Ключи, допускающие значение NULL, в TypeScript в объявлении типа массива объектов

Я использую Typescript для написания компонентов React. В настоящее время я определяю типы реквизита как Typescript type. Вот пример:

type Props = {
  id: number //required
  name: string | null //optional
}

type ParentProps = Array<Props>

let props:ParentProps = [
  {
      id:5,
      name:"new"
  },
  {
      id:7,
  }
]

//Gives error: Property 'name' is missing in type '{ id: number; }' but required in type 'Props' 

В этом случае я хотел бы, чтобы type ParentProps был просто массивом type Props. На практике ключ имени, допускающий значение NULL, хорошо работает для отдельных объектов типа Prop. При объявлении объекта типа ParentProps this отображается в приведенном выше фрагменте.

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

Спасибо.


person Max    schedule 16.08.2020    source источник


Ответы (1)


Как насчет определения Props следующими способами:

type Props = {
  id: number
  name?: string | null
}

или просто

type Props = {
  id: number
  name?: string
}

Кроме того, если вы хотите оставить определение Props без изменений, вы можете изменить type ParentProps:

type ParentProps = Array< Omit<Props, "name"> & { name?: string|null } >
person TTY112358    schedule 16.08.2020
comment
Это идет в правильном направлении, необязательные свойства действительно записываются с ?, но null в этом случае следует удалить из типа. Необязательное свойство никогда не будет оцениваться как null, если оно не было явно установлено на null, и в этом случае необязательность свойства не имеет значения, поскольку оно было указано. Другими словами, ваша вторая версия правильная. - person Aluan Haddad; 17.08.2020