Thanks for the article. I've tried this solution, but stuck with an error:
Type 'string | null | undefined' is not assignable to type 'string | undefined' <div className={className} ~~~~~~~~~ node_modules/@types/react/index.d.ts:1645:9 1645 className?: string;
I'm using React class component declaration and @types/react
Passionate, positive-minded, Sr Front-end Eng @ Preply (Design System) / Advisor @ Plannix / ex platform team / ex team leader / Speaker / Instructor / Writer / Remote worker
Location
Lecco, Italy
Education
Bachelor's degree, Communication design - High School Diploma, Informatic Technologies
Pronouns
he/him
Work
Senior Front-end Engineer/Tech lead at Preply (Design System)
Thank you for your amazing article!! 👏 One question: how do you manage callback props? The solution above does not help with them because the proptypes does not allow to manage them effectively. For example, I could have this ComponentProps type in my component
That's really interesting. I didn't know you can still use propTypes with TypeScript, I just always assumed that you gotta always write interfaces for props.
I think the problem in this specific case is tied to using forwardRef. Will try to find out in more detail , but I think forwardRef drops any default props.
Thanks for the article. I've tried this solution, but stuck with an error:
I'm using React class component declaration and @types/react
Without declaring className on propTypes it fails with an error
Property 'className' does not exist on type
'Readonly<InferPropTypes<{...`What could be the reason for this?
Thanks for the question. Could you build a codesandbox example, so we can see the complete example and then try to fix it from there?
Sure, here it is codesandbox.io/s/weathered-snowfla...
Looks like If disable strict mode in tsconfig.json it works fine.
Excellent, thanks!
Will try it out and provide some feedback.
Thank you for your amazing article!! 👏
One question: how do you manage callback props? The solution above does not help with them because the proptypes does not allow to manage them effectively. For example, I could have this ComponentProps type in my component
how could I update the
InferPropTypes
type to be prompted by TS if I pass a callback with a wrong signature?Thank you so much
Thanks for the kind words!
I will have a closer look tomorrow and try to provide more insights if possible.
That's really interesting. I didn't know you can still use propTypes with TypeScript, I just always assumed that you gotta always write interfaces for props.
If you add the
defaultProps
definition to theText
component, it should probably be enough for TypeScript to figure out that the property is optional.This is interesting. Can you take a look at the simplified example:
codesandbox.io/s/fancy-bird-vqd9x
If you remove
defaultProps
TypeScript will complain.I think the problem in this specific case is tied to using
forwardRef
. Will try to find out in more detail , but I think forwardRef drops any default props.Yes, I think the problem is within
forwardRef
in this case. It drops thedefaultProps
.I'm confused. In the first example, the (optional)
active
prop is of typePropTypes.Requireable<boolean>
.Doesn't that mean it's required? What does "requireable" mean?
Ohhhhh - nevermind. That
Requireable
interface has a method on it calledisRequired
. So, it's for things can possibly can be made required. 👍Excellent, thanks! Will have a look at this and try to figure out how we can solve this.
Thanks for the excellent post. How do you manage typing spread props?
Sorry, haven't been checking any comments for some time now. Will look into this and add more information.
Thanks for the clarification!