Типы несовместимы при использовании объекта распространения - PullRequest
1 голос
/ 27 марта 2020

Я сталкиваюсь со странной ошибкой в ​​машинописи, которую не могу найти в inte rnet.

type IDialogTypeProps = 'info' | 'alert' | 'success' | 'warning';

  interface IDialogProps {
    text: string;
    type: IDialogTypeProps;
  }

  const obj = {type: 'warning'}

const dialog:IDialogProps = {
  text: 'string',
  ...obj,
}

Машинопись через предупреждение об этом

Types of property 'type' are incompatible.
Type 'string' is not assignable to type 'IDialogTypeProps'

Но когда я помещу type: string прямо в объект диалога, машинопись будет скомпилирована без предупреждений. Я уверен, что решить эту проблему довольно просто.

1 Ответ

2 голосов
/ 27 марта 2020

Проблема в том, что ваш obj объект, не имеющий явного типа, предполагается Typescript следующим образом:

const obj: {
  type: string;
}

Вы можете заставить TS не автоматически расширять выведенный тип с 'warning' до string, обозначив строку 'warning' как const. Изменить определение obj на:

const obj = { type: 'warning' as const }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...