#javascript #reactjs #typescript #types
Вопрос:
Вот мой код:
type DetailsItemEditInput = {
type: 'text' | 'number';
};
type DetailsItemEditDropdown = {
type: 'dropdown';
options: [];
};
type DetailsItemEdit = DetailsItemEditDropdown | DetailsItemEditInput;
export const DetailsItemEdit: FC<DetailsItemEdit> = ({ type, ...props }) => {
switch (type) {
case 'text' || 'number':
return <Input type={type} />;
case 'dropdown':
return <Select options={props.options} />;
default:
return <div style={{ color: 'red' }}>Wrong type</div>;
}
};
Чего я пытаюсь достичь:
Я хочу, чтобы свойство options было обязательным, только когда тип является «выпадающим». Я подумал, что мог бы сделать это с |
помощью . Но, к сожалению, props
в этой части, похоже, нет свойства options <Select .../>
. Чего мне не хватает?
Property 'options' does not exist on type '{ children?: ReactNode; } | { options: []; children?: ReactNode; }'.
Property 'options' does not exist on type '{ children?: ReactNode; }'.ts(2339)
Ответ №1:
TypeScript недостаточно умен, чтобы сузить тип props
в вашем коде. Если вы не разрушаете реквизиты, код должен работать.
Комментарии:
1. Прямо сейчас, спасибо!. Неужели нет никакого способа уничтожить их?
2. @alex, вероятно, нет, потому что это скроет связь между
type
иoptions
.3. В этом есть смысл. Спасибо!