Reactjs TS2339:不动产';whyDidYouRender&x27;不存在于类型';FC<;按钮按钮>';

Reactjs TS2339:不动产';whyDidYouRender&x27;不存在于类型';FC<;按钮按钮>';,reactjs,typescript,Reactjs,Typescript,也许是个愚蠢的问题,但为什么会出现TS2339错误 import * as React from 'react'; import StyledButton from './Button.styled'; interface ButtonProps { label?: String; onClick?: (e: React.SyntheticEvent) => any | Function; whyDidYouRender?: any; } const Butt

也许是个愚蠢的问题,但为什么会出现TS2339错误

import * as React from 'react';

import StyledButton from './Button.styled';

interface ButtonProps {
    label?: String;
    onClick?: (e: React.SyntheticEvent) => any | Function;
    whyDidYouRender?: any;
}

const Button: React.FC<ButtonProps> = (props: ButtonProps) => {
    return (
        <StyledButton onClick={props.onClick}>
            {props.label}
        </StyledButton>
    )
};
Button.whyDidYouRender = true;

export default Button;
import*as React from'React';
从“./Button.styled”导入StyledButton;
界面按钮按钮{
标签?:字符串;
onClick?:(e:React.SyntheticEvent)=>任意函数;
WhydidyYourender?:任何;
}
常量按钮:React.FC=(道具:按钮按钮)=>{
返回(
{props.label}
)
};
Button.whydidyorender=true;
导出默认按钮;
此行出错:
Button.whydidyorender=true


我该如何解决这个问题呢???

这是一个打字错误<代码>whyDidYouRender
未在FC类型上定义。

编辑: 现在我了解了您的用例,这里有一个更简单的答案。更改执行作业的行

(Button as any).whyDidYouRender = true
这将允许您设置属性一次,否则将其视为常规功能组件

原始答复: 您试图将功能按钮视为具有类型
按钮:buttonnprops
,但按钮声明为
按钮:React.FC


FC我也遇到了这个问题。您可以在typings中使用Function Component的定义来解释为什么要呈现()而不是React自己的FC定义

然后,您必须
从“@welldone software/why doing render”导入React
并使用
React.FC
。考虑混淆它(<代码>导入),因为''WyDeNeDeleRebug从'WelDeNodos/为什么呈现“< /代码>,使用<代码> WydIdUnEndReReal.FraseCuffs<代码> >,这样,如果您遇到不被导入的麻烦,仍然可以从“Read”中导入反应。p> 或者,您可以自己定义它,并按照Tristan的建议扩展FunctionComponenet的现有定义(FC只是FunctionComponent的别名)。这将更正确,因为您将保留FunctionComponent的原始类型

下面是一个示例,说明了如果您希望避免使用
&{whydidyorender?:boolean}
装饰所有需要此属性的组件,则如何在单独的模块中执行此操作,如果您遵循Tristan的解决方案,则需要这样做:

declare module 'augmented-react' {
  import { FunctionComponent } from 'react';
  export type FC<P = {}> = FunctionComponent<P> & {
    whyDidYouRender?: boolean
  };
}

声明模块“增强的反应”{
从“react”导入{FunctionComponent};
导出类型FC=FunctionComponent

&{ WhydidyYourender?:布尔值 }; }


然后,您必须从增强的react而不是react导入FC。

像这样添加对
react app env.d.ts
的引用解决了问题:

/// <reference types="react-scripts" />
/// <reference types="@welldone-software/why-did-you-render" />
//
/// 

错误的另一部分是什么?我只有这一部分:
TS2339:属性“whyDidYouRender”在类型“FC”上不存在。
但我如何修复它??!定义一个新类型并将其用作按钮的类型。我按照文档操作,只添加了一个属性,但出现了一个错误:,
Usage
section…您能提供一些如何执行此操作的示例吗?从“react”声明模块“augmented react”{import{FunctionComponent};导出类型FC=FunctionComponent

和{whydidyorender?:布尔;};}

Button: React.FC<ButtonProps> & {whyDidYouRender: any} = (props) => ...
declare module 'augmented-react' {
  import { FunctionComponent } from 'react';
  export type FC<P = {}> = FunctionComponent<P> & {
    whyDidYouRender?: boolean
  };
}
/// <reference types="react-scripts" />
/// <reference types="@welldone-software/why-did-you-render" />