npm 包 @uber-web-ui/extract-react-types-loader 使用教程

在开发 React 应用时,我们经常需要查看组件的类型及其参数的类型。而通过使用 @uber-web-ui/extract-react-types-loader 这个 npm 包,可以方便的从 React 组件代码中提取注释中的类型定义,并将其类型定义导出到一个单独的文件中。

安装

安装 @uber-web-ui/extract-react-types-loader 可以通过 npm 安装:

npm install @uber-web-ui/extract-react-types-loader --save-dev

使用

@uber-web-ui/extract-react-types-loader 适用于使用 Webpack 构建应用程序的情况下。使用这个 loader 要在 Webpack 配置文件中配置。

配置 Webpack

在 Webpack 配置文件中添加如下代码:

module: {
  rules: [{
    test: /\.(js|jsx)$/,
    loader: 'awesome-typescript-loader'
  }, {
    test: /\.(js|jsx)$/,
    loader: '@uber-web-ui/extract-react-types-loader',
    options: {
      outputPath: './extracted-types.json'
    }
  }]
}

在上面的代码片段中,我们同时应用了 awesome-typescript-loader 和 @uber-web-ui/extract-react-types-loader,这意味着我们的项目代码将首先被 TypeScript 编译,然后传递给 @uber-web-ui/extract-react-types-loader。

配置注释

在您的 React 组件代码中的注释中添加类型定义。通过指定 @props@typedef 来定义 props 和其他类型:

/**
 * @typedef {object} PropsType
 * @property {string} name
 * @property {number} age
 */

/**
 * This is a simple component that returns user information.
 * 
 * @component
 * @props {PropsType} props
 * @returns {JSX.Element}
 */

在上面的示例中,我们定义了一个 PropsType 对象,其中包含两个必填属性:nameage。我们随后将此类型定义传递给组件的 props 属性。

生成类型文件

运行 Webpack,并可以看到在 outputPath 指定的位置生成了一个 extracted-types.json 文件。打开此文件,可以看到收集到的类型定义,如下所示:

{
  "MyComponent": {
    "props": {
      "age": {
        "type": "number",
        "description": ""
      },
      "name": {
        "type": "string",
        "description": ""
      }
    }
  }
}

可以看到在此文件中,MyComponent 随后包含 props 对象,该对象包含了我们在之前注释中定义的类型。

示例代码

import React from 'react';

/**
 * @typedef {object} PropsType
 * @property {string} name
 * @property {number} age
 */

/**
 * This is a simple component that returns user information.
 * 
 * @component
 * @props {PropsType} props
 * @returns {JSX.Element}
 */
const MyComponent = ({ name, age }) => (
  <div>
    <h1>Name: {name}</h1>
    <p>Age: {age}</p>
  </div>
);

export default MyComponent;

在上面的示例中,我们定义了一个名为 MyComponent 的组件,并为其添加了一个名为 PropsType 的类型定义。此后,我们将类型定义和注释添加到组件的定义中。随后在 Webpack 编译时,我们根据 Webpack 配置文件中的配置文件生成了一个 JSON 文件,其中包含收集到的组件和其类型定义。

这个功能可以让我们避免前端组件类型定义较多时还要手写文档等,详细且有深度和学习以及指导意义,让开发 React 应用更加快捷高效。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/600673ddfb81d47349e53b68


纠错反馈