кусок хтмл, например
<Component trigger={<button onClick={action}>Button</button>} />
Либо свой компонент
<Component trigger={<MyButton onClick={action}>Button</MyButton>} />
Как нормально прописать Component.propTypes и type ComponentProps чтобы тс и реакт не ругались?
Пробовал
1. instanceOf(Element)
2. elementType
В type ComponentProps = { trigger: ReactNode | ReactNode[] } вроде работает норм
просто реакт.реактноде без массива
С тс все хорошо, ругается реакт на propTypes Warning: Failed prop type: Invalid prop `children` of type `Object` supplied to `Dropdown`, expected instance of `Element`.
- нет хтмл - ReactElement и ReactNode можно посмотреть в типах и преисполниться
Ну я подал как пропс тупо <button>Button</button>, ругается чтобы я не прописал в propTypes
у проптайпс.ноде вроде так
https://gist.github.com/YuraKolesnikov/47f12c2d10649af65e37cf5cd5dee567
у проптайпса нет node?
Лол ты че, я думал, это манера речи такая, удали propTypes, у тебя тайпскрипт)))
Хм, я думал надо все равно дублировать))
Нет, они одно и то же делают, но тс лучше
не совсем. pt в рантайме в дев режиме
node помог, спасибо, совсем забыл
Удали проп тайпс 👺👺👺👺
Да бесполезно, хоспаде
Вот кусок кода из настоящей профессиональной либы export interface AccordionProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'>, BsPrefixProps { activeKey?: AccordionEventKey; defaultActiveKey?: AccordionEventKey; onSelect?: AccordionSelectCallback; flush?: boolean; alwaysOpen?: boolean; } const propTypes = { /** Set a custom element for this component */ as: PropTypes.elementType, /** @default 'accordion' */ bsPrefix: PropTypes.string, /** The current active key that corresponds to the currently expanded card */ activeKey: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), /** The default active key that is expanded on start */ defaultActiveKey: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), /** * Callback fired when the active item changes. * * ```js * (eventKey: string | string[] | null, event: Object) => void * * * @controllable activeIndex */ onSelect: PropTypes.func, /** Renders accordion edge-to-edge with its parent container */ flush: PropTypes.bool, /** Allow accordion items to stay open when another item is opened */ alwaysOpen: PropTypes.bool, }; ```
У тебя тс, ну приглядись, ты сидишь и дублируешь написанные проверки типов на проверки в рантайме
Либа лежит отдельно от основного проекта, тс компилируется в жс и типы идут наюх, или я что-то не понимаю?
Потому что либы могут подключаться и в приложения без тса 🤷♀️
Нет, типы вместе с либой
Ну дык? Я ж выше написал, я выношу компоненты в либу, основной проект БЕЗ TS
Аааа, я слепой, штош, зря быканул
Все равно спасибо, не знал что они дублируются. Когда проект полностью переедет с жс на тс, удалю)
Обсуждают сегодня