React Typescript - 添加自定义属性

Posted

技术标签:

【中文标题】React Typescript - 添加自定义属性【英文标题】:React Typescript - Adding custom attribute 【发布时间】:2019-07-19 01:37:51 【问题描述】:

React Typescript 允许添加自定义 data-* 属性。 但是是否可以添加自定义属性,例如“名称”|| “测试”行为。 ?

<span name="I'm causing a type error" data-test="I'm Working"/>

我加粗的。

类型错误:类型'孩子:元素;名称:字符串;数据测试: 细绳; ' 不可分配给类型 'DetailedhtmlProps,HTMLSpanElement>'。 类型上不存在属性“名称” 'DetailedHTMLProps,HTMLSpanElement>'。 TS232

"react": "^16.7.0",
"typescript": "^3.2.4",

【问题讨论】:

【参考方案1】:

在 react 16+ 中是可能的,see

问题是打字稿不知道它(还)

但您仍然可以添加 @ts ignore 进行类型检查

 //@ts-ignore
  <span name="I'm causing a type error" data-test="I'm Working"/>

【讨论】:

是的,我就是这么想的。谢谢。 我正在使用带有 TypeScript 的 React 17,但我的项目仍然无法编译,因为元素上不存在该属性(例如锚标记)。那篇博客文章听起来应该可以正常工作,我错过了什么吗?【参考方案2】:

还有一种方法... 跳过静态检查(打字稿不做动态)

 
  const allowedProps = test: "not-data-attribute"
  <span ...allowedProps/>

【讨论】:

【参考方案3】:

在您的项目中创建任何扩展名为 .d.ts 的文件 并且只需在 JSX 命名空间中扩展按钮界面。 我正在使用它来使用 React 创建 amp 页面。

declare namespace JSX 
    interface ExtendedButton
        extends React.DetailedHTMLProps<
            React.ButtonHTMLAttributes<HTMLButtonElement>,
            HTMLButtonElement
        > 
        customAttribute?: string;
    

    interface IntrinsicElements 
        button: ExtendedButton;
    

【讨论】:

【参考方案4】:

简单的添加以data-开头的自定义属性,在某些情况下您可以以aria-开头

<div data-attr=3 data-nothing="super">hover</div>

似乎打字稿知道带有这些前缀的自定义属性,检查这个link

【讨论】:

以上是关于React Typescript - 添加自定义属性的主要内容,如果未能解决你的问题,请参考以下文章

如何将 TypeScript 与 withRouter、connect、React.Component 和自定义属性一起使用?

带有 Typescript 的 React-Native 自定义文本组件:“将 React.ReactNode 类型转换为文本类型......”

如何测试使用自定义 TypeScript React Hook 的组件?

如何在 TypeScript v2.x 中从自定义 React 组件公开“通用”事件

如何测试使用自定义TypeScript React Hook的组件?

使用 TypeScript,React,ANTLR 和 Monaco Editor 创建一个自定义 Web 编辑器