typescript 类型“IntrinsicAttributes & ...”上不存在属性...

o0lyfsai  于 2023-04-22  发布在  TypeScript
关注(0)|答案(3)|浏览(558)

我将我的.js文件更改为类型脚本文件. tsx。我在文件中定义了以下函数:

function MyCard(param1: ObjectDto, toggleFunction: any) {}

我在另一个.tsx文件中使用这个函数,如下所示

<MyCard param1={param1Value} toggleFunction={myToggleFunction} />

但我得到以下错误:
类型“{param 1:ObjectDto; toggle函数:(index:any)=〉void;“}”不能分配给类型“IntrinsicAttributes & ObjectDto”。类型“IntrinsicAttributes & ObjectDto”上不存在属性“param 1”。
在更改为Typescript格式之前,这工作得很好。我如何为Typescript修复这个问题?

rqdpfwrv

rqdpfwrv1#

如果其他人遇到这个问题,我的解决方案是将类型添加到React.FC:
而不是:

type Props = {
    bar: string[],
    buzz: number[]
};

const Foo: React.FC = (props: Props) => {

我需要:

type Props = {
    bar: string[],
    buzz: number[]
};

const Foo: React.FC<Props> = (props: Props) => {
wvyml7n5

wvyml7n52#

组件只有一个参数,即props对象,因此您的函数应该如下所示:

function MyCard(props: { param1: ObjectDto, toggleFunction: any }) {}

类型系统正在尝试将属性与函数的第一个参数匹配,该参数的类型为ObjectDto。这就是为什么会出现错误
不可分配给类型“IntrinsicAttributes & ObjectDto”

z2acfund

z2acfund3#

你是否为你的组件“MyCard”做了一个接口?
就像这样:

interface MyCodeParams {
    param1: ObjectDto
    toggleFunction: (param: any) => void
}

另外,我认为toggleFunction: (param?: any) => void是正确的类型,因为你的函数可能有参数,所以你应该像这样输入你的函数。

相关问题