当前位置: 首页 > 知识库问答 >
问题:

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

茅炯
2023-03-14

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

组件示例如下所示:

我的组件.js

import React from 'react';

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

我希望我的类型定义为:

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

查看这个使用TypeScript创建React组件的示例,我发现了类型:< code>React。SFC。

我试着在我的定义中使用这个:

索引.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]'('。

我对TypeScript很陌生,显然我错过了一些东西,但是我找不到任何关于为无状态组件创建类型定义的文章。

编辑要明确的是,我不想在TypeScript中重写我的组件。我想为现有的ES6无状态组件创建一个类型定义文件(*.d.ts)。

共有3个答案

何峰
2023-03-14

我认为您需要<code>var MyComponent:React.SFC

您可能会考虑用typescript重写现有代码,看看tsc会生成什么样的定义。然后丢弃代码,只保留定义。

樊令秋
2023-03-14

试试这个:

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

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

  export const MyComponent: (props: MyComponentProps) => React.SFC<MyComponentProps>
}

来自官方 React 页面推荐 类型定义

尹承业
2023-03-14

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

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/definitely typed/definitely typed/blob/master/types/material-ui/index . d . ts

它与TypeDoc和VS Code的intellisense配合得很好。

我相信导出默认是在这里破解智能感知的关键。

 类似资料:
  • 打字稿:2.8。3 @类型/反应:16.3。14 函数组件中的返回类型是,当我将组件声明为(React.StatelessComponent的别名)。 出现了三个错误: >

  • 使用任意数量的属性定义任何类型的简单react函数组件时出现类型脚本错误,包括使用FC、ComponentWithChildren等... 这是一个最小的复制品 给了我错误 类型“({ className }: { className?:未定义;}) = 我不明白这就是我总是定义组件的方式。打字稿中有什么我不知道的新东西吗?

  • 我试图在TypeScript中编写一个React无状态函数组件。请参见以下代码: 然而,编译器在const Link上给了我一个错误: src/components/Link。tsx(17,7):错误TS2322:Type“({view,className,params,queryParams,store,refresh,style,children,title,router}:LinkPr…”不

  • 问题内容: 结合使用TypeScript和React,我们不再需要扩展,以使编译器知道所有react组件prop都可以有子代: 但是,无状态功能组件似乎并非如此: 发出编译错误: 错误:(102、17)TS2339:类型“ MyProps”上不存在属性“子级”。 我猜这是因为编译器实际上没有办法知道在props参数中将提供香草函数。 所以问题是我们应该如何在TypeScript的无状态功能组件中使

  • 使用带有React的TypeScript,我们不再需要扩展,以便编译器知道所有React组件Props都可以有子级: 然而,无状态功能组件似乎不是这样: 发出编译错误: 错误:(102,17)TS2339:类型“MyProps”上不存在属性“children”。 我想这是因为编译器真的无法知道在props参数中会给出

  • 在像C#这样的语言中,我可以声明一个列表列表,例如: 有没有类似的方法来在 TypeScript 中声明一个强类型数组数组?我尝试了以下方法,但都没有编译。