#reactjs #typescript
#reactjs #typescript
Вопрос:
У меня есть компонент, который работает нормально, но одним из реквизитов является тип «string», и я хотел бы передать компонент или просто сделать тип данных «any». Есть ли способ сделать это?
Чтобы сделать это более понятным, я пытаюсь изменить поведение стороннего класса. В данном случае это очень безопасно, и я изменил сторонний код напрямую, но гораздо лучше, если это возможно в Typescript, наследовать и в унаследованном классе изменить тип данных prop, чтобы я мог вместо простого отображения текста отображать, например, список.
Комментарии:
1. Вашему вопросу не хватает ясности. Можете ли вы добавить больше деталей к своему вопросу?
2. Если компонент библиотеки третьей стороны ожидает строку, вы должны передать ему строку. Вы можете столкнуться с неожиданным поведением, если передадите ему компонент. Чтобы ответить на ваш вопрос, я не думаю, что в любом случае можно настроить типизированные определения сторонней библиотеки
3. @paulosullivan22: я точно знаю, что произойдет — я спрашиваю, как это можно сделать без прямого изменения самой сторонней библиотеки.
Ответ №1:
Ну, передача типа imo any
обычно сводит на нет цель использования Typescript в первую очередь. Насколько я понимаю, у вас есть два варианта:
-
Разделите реквизит: используйте реквизит типа
string
и другой типаReactNode
, поскольку это компонент, который вы планируете передать. -
Если по какой-то причине это должен быть один prop, используйте
string | ReactNode
в качестве его типа. Хотя я бы рекомендовал вариант 1 по этому поводу.
Если подумать еще дальше, вы можете вообще отказаться от передачи компонента в качестве поддержки (по соображениям производительности). Проектирование ваших компонентов таким образом, чтобы вы могли работать с обычным ES6 import
для получения компонента, было бы намного лучше, но опять же это зависит от вашего использования и дизайна.