milesj / babel-plugin-typescript-to-proptypes

Generate React PropTypes from TypeScript interfaces or type aliases.
MIT License
367 stars 25 forks source link

Type import from react alongside default import causes the plugin to not output prop types #59

Open juzerzarif opened 2 years ago

juzerzarif commented 2 years ago

Hi, thanks for all your work on this - it's an awesome plugin!

I'm running into an issue where if I have a type import from react separate from the default import like so

import React from 'react';
import type { HTMLAttributes, MouseEventHandler } from 'react';

The plugin will not output any propTypes for the component. Switching the order of the imports will fix the issue:

import type { HTMLAttributes, MouseEventHandler } from 'react';
import React from 'react';

Did a little bit of digging and it looks like the second import (the type import here) overrides the default import found from the first import here: https://github.com/milesj/babel-plugin-typescript-to-proptypes/blob/25b74f3776629d898afe3be07e1da523a0da30c1/src/index.ts#L133-L137

Which ends up short circuiting the plugin execution: https://github.com/milesj/babel-plugin-typescript-to-proptypes/blob/25b74f3776629d898afe3be07e1da523a0da30c1/src/index.ts#L163-L166

My first thought for a fix would be to preserve that default import from react by only assigning on L136 if state.reactImportedName is falsy. But obviously I'm not intimately familiar with the rest of the codebase so not sure if that causes any unwanted side effects somewhere else 😅.

Please let me know if you have any pointers for a fix - I'd be happy to put up a PR 😄.

emmenko commented 2 years ago

We can confirm that we have the same issue. No prop types generated when switching to v2.