reactjs - 如何为无状态 React 组件创建 TypeScript 类型定义?

标签 reactjs typescript type-definition

我正在尝试为现有的无状态 React 组件套件创建类型定义,这样我就可以自动生成文档并改进我团队工具中的智能感知。

示例组件可能如下所示:

我的组件.js

import React from 'react';

export const MyComponent = ({ prop1, prop2, prop3 }) => (
    <div>
        { prop1 ? prop2 : prop3 }
    </div>
);

我希望我的类型定义:

  • 定义哪些 Prop 是允许的(哪些是必需的)
  • 它将返回 JSX

查看this使用 TypeScript 创建 React 组件的示例,我发现了类型:React.SFC

我试图在我的定义中使用它:

index.d.ts

declare module "MyComponent" {
    import React from 'react';

    interface MyComponentProps {
        prop1: boolean;
        prop2?: string;
        prop3?: string;
    }

    export const MyComponent = React.SFC<MyComponentProps>
}

但是我收到了 linting 错误 [ts] '(' expected.

我是 TypeScript 的新手,我显然遗漏了一些东西,但我找不到任何关于为无状态组件创建类型定义的文章。

编辑 明确地说,我不想用 TypeScript 重写我的组件。我想为现有的 ES6 无状态组件创建类型定义文件 (*.d.ts)。

最佳答案

经过大量摆弄后,我们确定了以下设置。

import React from 'react';

export interface MyComponentProps {
    prop1: boolean;
    prop2?: string;
    prop3?: string;
}

declare const MyComponent: React.SFC<MyComponentProps>

export default MyComponent

这方面的灵感来自: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/material-ui/index.d.ts

它适用于 TypeDoc 以及 VS Code 的智能感知。

我相信 export default 是这里破解智能感知的关键。

关于reactjs - 如何为无状态 React 组件创建 TypeScript 类型定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50946979/

相关文章:

reactjs - 单击标签时测试输入元素单击调用

reactjs - 继承ReasonReact中的Nextjs App组件(pages/_app.js)

reactjs - 如何从 React.js 发送带有图像的多部分/表单数据?

javascript - 使用 ofType 访问 @ngrx 效果中的操作 Prop 以执行多个操作

angular - 在 Angular/Typescript 中的 *ngFor 中添加一个 if else 子句

typescript - 从模块声明文件中的命名空间合并接口(interface)

reactjs - 如何创建绑定(bind)故事书控件参数的通用 typescript 函数

typescript - Dart中的递归对象类型?

go - 何时对基本类型使用类型定义

typescript - 正确的 typescript 类型定义,用于返回具有现有键的新对象