TS2339: свойство 'value' не существует в 'string | SelectValue» - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь получить значение от объекта, однако TypeScript не понимает, что я делаю. Вот фрагмент кода:

interface SelectValue {
  label: string;
  value: number;
}

interface FormValues {
  entity: SelectValue | string;
}

const makeFullDataObject = (formValues: FormValues) => ({
  entity: formValues.entity.value || formValues.entity,
});

Ошибка говорит:

TS2339: Property 'value' does not exist on type 'string | SelectValue'.   Property 'value' does not exist on type 'string'.

Я знаю, что это свойство не существует в строковом типе, поэтому я помещаю строку ИЛИ. Это прекрасно работает в JavaScript, но TypeScript не позволит мне скомпилировать это. Какие-либо решения без использования any? Спасибо

1 Ответ

1 голос
/ 15 апреля 2020

Вы не даете TypeScript достаточно информации. Что касается этого, formValues.entity может быть строкой и поэтому не иметь свойства value. Вы должны попытаться сузить его тип. Вот пример:

function isSelectValue(entity: string | SelectValue): entity is SelectValue {
  return typeof (entity as any).value === 'string';
}

Затем позже:

const makeFullDataObject = (formValues: FormValues) => ({
  entity: isSelectValue(formValues.entity) ? formValues.entity.value : formValues.entity,
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...