打字稿错误:输入 '{ onClick: () => void; }' 不可分配给类型 'IntrinsicAttributes'

加布里埃拉·图尔凯蒂

我是 Typescript 的新手,我很难理解为什么我的代码不起作用。

我正在尝试使用 react 和 typescript 构建轮播图片库,当我尝试使用左右箭头上的“onClick”进行导航时遇到了问题。

我收到以下错误:

Type'{ onClick: () => void; }'不可分配给 type 'IntrinsicAttributes'属性'onClick'在 type 上不存在'IntrinsicAttributes'

这是我的代码:

const Carousel = ({ slides }) => {
   
    return (
        <section className="slider">

            <ArrowRight onClick = {nextSlide} /> //The error is here!
            <ArrowLeft onClick = { () => prevSlide() } /> //and here!

            {slides.map((slide, index) => {
                return (
                    <div className="img-slide">
                        <img src={slide.image} />
                        <div className="rolo-slide">
                            {/* <img src={slide.image} onClick={slides.setCurrent(index)} /> */}
                        </div>
                    </div>
                )
            })}
        </section>
    )
}
export default Carousel

这是 ArrowLeft 和 Right 是什么,它们只是一个跨度,我使用 CSS 制作了箭头。

function ArrowLeft() {
    return (
        <span className="arrow left"></span>
    )
}
TJ克劳德

ArrowLeft根本不接受任何道具,因此 TypeScript 不会让您为其分配onClick不接受道具。

更新ArrowLeft以接受onClick处理程序。对于函数式组件,我通常使用函数表达式而不是声明:

const ArrowLeft: React.FC<{onClick?: React.MouseEventHandler<HTMLElement>}> = ({onClick}) => {
    return (
        <span className="arrow left" onClick={onClick}></span>
    );
};

一些注意事项:

  • React.FC是 的别名React.FunctionComponent它告诉 TypeScript 这ArrowLeft是一个函数组件。
  • React.FC有一个可选的 type 参数来指定功能组件期望的 props 的类型(它们将与通常的 props 组合)。<>React.FC提供了一种类型参数描述所述对象的道具这种功能部件接受。
  • onClick?:onClick道具是可选的。
  • React.MouseEventHandler<HTMLElement> 表示道具的类型(如果给定)是 HTML 元素的鼠标事件处理程序。
  • 请注意我如何将onClick处理程序转发到 ,span以便在span单击时调用它

我使用了箭头函数,因为它们比传统函数(略)轻,但如果您愿意,也可以使用传统函数:

const ArrowLeft: React.FC<{onClick?: React.MouseEventHandler<HTMLElement>}> = function({onClick}) {
    return (
        <span className="arrow left" onClick={onClick}></span>
    );
};

顺便说一句:不要担心记住所有这些类型。你会想知道的React.FC当然是(或React.Component用于class组件),但例如在onClick上面你没有神奇地知道这一点。在任何像样的 IDE 中,您都可以从不存在的那个开始,然后执行以下操作:

// To start with
const ArrowLeft: React.FC = () => {
    return (
        <span className="arrow left" onClick={}></span>
    );
};

...然后将鼠标悬停onClickspan. 我的 IDE (VS Code) 告诉我类型onClickReact.MouseEventHandler<HTMLSpanElement> | undefined

VS Code IDE 显示了 span 的 onClick 工具提示

| undefined部分我在道具处理的使用?,使其可选的,我改变HTMLSpanElement,只是更普遍的HTMLElement,因为没有任何需要使用的代码ArrowLeft就知道它使用一个span,具体而言,与一个divi或什么的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

类型“ void”不可分配给类型“ ObservableInput <{}>”

类型“ void”不可分配给类型“ User []”

输入'Promise <布尔值| void>'不可分配给'boolean'类型

不可分配给IntrinsicAttributes和IntrinsicClassAttributes类型React.js

错误:类型“ void”不可分配给类型“ ReactNode”

类型“ void”不可分配给类型“ FormData”

如何将参数传递给onClick上的函数?(错误:“ void”不可分配给type)

打字稿:类型“null”不可分配给类型错误

使用 .find() 方法获取“Void 不可分配给布尔值”错误

Reactjs 和打字稿错误 TS2322:类型不可分配给类型“IntrinsicAttributes 和 IntrinsicClassAttributes”

类型 '() => void' 不可分配给类型 'string'

错误 TS2322:类型 'void' 不可分配给类型 'Promise<void> | JQueryPromise<void>'

打字稿:“不可分配给从不类型的参数”错误

Angular ' ' 不可分配给类型 'unknown[]'。错误

类型 string[] 不可分配给类型 'IntrinsicAttributes & string[]'

角度/打字稿错误:类型 'Observable<unknown>' 不可分配给类型 'Observable<Blogpost>'

输入'{数据:数字;}' 不可分配给打字稿中的类型 '(obj: any) => any' 错误

打字稿错误:类型的“this”上下文......不可分配给方法的“this”类型

在反应打字稿中,“字符串”类型不可分配给“从不”类型,“未知”类型不可分配给“从不”类型错误

输入'文章| null' 不可分配给类型 'void'

输入'{孩子:字符串;下载:未定义;}' 不可分配给类型 'IntrinsicAttributes & { 下载页面链接:任何;}'

类型客户端 null 不可分配给 IntrinsicAttributes 和 { Children: ReactNode nextjs

打字稿错误:输入'IStory | undefined' 不可分配给类型

类型不可分配给类型 'IntrinsicAttributes & { children?: ReactNode; }'。财产

类型“void”不可分配给类型“ValidationErrors”

打字稿类型 A 不可分配给类型 A(相同类型)

打字稿:类型 'Promise<void>' 不可分配给类型 'void | 破坏者

这个错误是什么意思?'(dispatch: Dispatch<IAuthType>) => Promise<void>' 类型的参数不可分配给 'AnyAction' 类型的参数

打字稿错误:类型'{道具:IDrink; }' 不可分配给类型 'IntrinsicAttributes & IDrink'