Skip to content
This repository has been archived by the owner on Nov 20, 2020. It is now read-only.

Importing types from a different file breaks docgen #80

Closed
jeffcstock opened this issue Jan 8, 2020 · 3 comments
Closed

Importing types from a different file breaks docgen #80

jeffcstock opened this issue Jan 8, 2020 · 3 comments

Comments

@jeffcstock
Copy link

jeffcstock commented Jan 8, 2020

Describe the bug

When importing a type or interface from a different file, docgen won't display props correctly (or at all).

To Reproduce

  1. Import an interface from a separate file. Use that in type declaration of component.

types/bootstrap.ts

export interface DropdownProps {
  /** Title to display in ActionSheet */
  action_sheet_title?: string

  /** URL to display alongside ActionSheet title */
  action_sheet_title_image?: string

  /** If this value matches an option's eventKey value, it will
   * render as selected
   */
  selectedKey?: string
}

Dropdown.tsx

import { DropdownProps } from 'types/bootstrap'

export const Dropdown: FC<DropdownProps> = (props) => {
  ...
}

Expected behavior

The Props block should display the corresponding Props.

Actual Behaviour

The props block doesn't display any props.

image


Fix

However, the props will show correctly if the interface is declared in the same file as the component.

Dropdown.tsx

export interface DropdownProps {
  /** Title to display in ActionSheet */
  action_sheet_title?: string

  /** URL to display alongside ActionSheet title */
  action_sheet_title_image?: string

  /** If this value matches an option's eventKey value, it will
   * render as selected
   */
  selectedKey?: string
}

export const Dropdown: FC<DropdownProps> = (props) => {
  ...
}

Results in:
image

Code snippets

System:

package.json

"react-docgen-typescript-loader": "^3.6.0",

Component is in TSX format.

Please paste the results of npx -p @storybook/cli@next sb info here.

Environment Info:

System:
  OS: macOS Mojave 10.14.6
  CPU: (12) x64 Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz
Binaries:
  Node: 8.11.3 - ~/.nvm/versions/node/v8.11.3/bin/node
  Yarn: 1.19.2 - /usr/local/bin/yarn
  npm: 6.12.1 - ~/.nvm/versions/node/v8.11.3/bin/npm
Browsers:
  Chrome: 79.0.3945.88
  Safari: 13.0.4
npmPackages:
  @storybook/addon-actions: ^5.2.5 => 5.2.5
  @storybook/addon-docs: ^5.2.5 => 5.2.5
  @storybook/addon-knobs: ^5.2.5 => 5.2.5
  @storybook/addon-links: ^5.2.5 => 5.2.5
  @storybook/addons: ^5.2.5 => 5.2.5
  @storybook/react: ^5.2.5 => 5.2.5
@denidiasjr
Copy link

Any news about this issue?

@strothj
Copy link
Owner

strothj commented Feb 6, 2020

This loader unfortunately does not automatically locate your project's tsconfig.json file (would be a great enhancement if a pull request is made).

If its path isn't specified, the underlying library react-docgen-typescript will fallback to creating a new TypeScript project for each file (I believe), which unfortunately does not resolve types external to the file being checked.

I've updated the documentation and updated the example project to show its usage:

    use: [
      require.resolve("ts-loader"),
      {
        loader: require.resolve("react-docgen-typescript-loader"),
        options: {
          // Provide the path to your tsconfig.json so that your stories can
          // display types from outside each individual story.
          tsconfigPath: path.resolve(__dirname, "../tsconfig.json"),
        },
      },
    ],

@jeffcstock
Copy link
Author

Thank you so much @strothj that is exactly the fix I needed. Thanks for updating the docs, i'm sure it will help others in my situation! 🎉

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants