当前位置: 首页 > 面试题库 >

使用React 16的类型'DetailedHTMLProps,HTMLDivElement>'不存在该属性

程墨竹
2023-03-14
问题内容

由于React 16现在允许自定义DOM属性,因此我尝试在Typescript代码中利用它:

import * as React from 'react';

<div className="page" size="A4">
</div>

但收到以下错误消息

错误TS2339:类型’DetailedHTMLProps ,HTMLDivElement>‘不存在属性’size’。

这个线程建议做一个moduleaugmentation,所以我尝试了这种方式:

import * as React from 'react';

declare module 'react' {
     interface HTMLProps<T> {
        size?:string;
    }    
}

同样的错误信息。

最后,我还尝试声明page为新的HTML标签:

declare global {
  namespace JSX {
    interface IntrinsicElements {
      page: any
    }
  }
}

<page className="page" size="A4">
</page>

它消除了错误消息,但是该size属性在编译后的代码中被完全忽略,而我最终得到:

<page className="page">
</page>

理想情况下,最后一个是我的首选解决方案。我想sizepagecustom标签旁边使用custom属性。

tsconfig.js

{
  "compilerOptions": {
    "outDir": "build/dist",
    "module": "esnext",
    "target": "es5",
    "lib": ["es6", "dom"],
    "sourceMap": true,
    "allowJs": true,
    "jsx": "react",
    "moduleResolution": "node",
    "rootDir": "src",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "suppressImplicitAnyIndexErrors": true,
    "allowSyntheticDefaultImports": true,
    "noUnusedLocals": false,
    "noUnusedParameters": false,
    "allowUnusedLabels": true,
    "allowUnreachableCode": true
  }
}

问题答案:

HTML支持自定义属性的data-
*属性类型。您可以在此处了解更多信息。

定义和用法 data- *属性用于存储页面或应用程序专用的自定义数据。

data- *属性使我们能够在所有HTML元素上嵌入自定义数据属性。

然后,可以在页面的JavaScript中使用存储的(自定义)数据来创建更具吸引力的用户体验(无需任何Ajax调用或服务器端数据库查询)。

data- *属性由两部分组成:

  • 属性名称不应包含任何大写字母,并且必须至少在前缀“ data-”之后一个字符
  • 属性值可以是任何字符串

注意: 前缀为“ data-”的自定义属性将被用户代理完全忽略。

不仅size="A4"可以使用,还可以使用data-size="A4"

<div className="page" data-size="A4">
  // ....
</div>


 类似资料:
  • 学习Typescript并尝试构建一个简单的文本框,在提交文本后显示文本。 我能够很好地捕捉输入,现在试图将其报告给用户。 问题出在编译类型上。脚本给出了以下错误消息:类型“htmldevelment”上不存在属性“value”。 我只是想分配div messageList的值来打印数组(现在还不关心格式)。 我一直在网上搜索,我能找到的大部分都说一定是命名错误,我尝试将名称更改为1,但仍然没有乐

  • 我使用的是完全修补过的Visual Studio 2013。我正在尝试使用JQuery、JQueryUI和JSRender。我也在尝试使用打字。在ts文件中,我得到如下错误: 类型“{}”上不存在属性“fade div”。

  • 我试图在登录过程后获得连接的用户模型, 首先,在CanActivate guard检查了带有用户JSON对象的本地存储并发现该对象为空之后,用户将重定向到“/login”URL 然后用户登录并重定向回根URL“/”,在连接过程中我使用AuthService,它将从服务器返回的用户对象保存在用户模型中 这是我的守卫:

  • 我是一个使用Typescript的新手,我得到一个错误提示: 没有与此调用匹配的重载。重载1 of 2,'(道具:只读 类型“{注意:{ 1:{ _ id:number;标题:字符串;正文:字符串;updatedAt:日期;};};“}”不能赋给类型“IntrinsicAttributes” = = = = = = = = = = = = = = = = = = = = = = = = = = =

  • 升级到Angular 6.0和Rxjs到6.0后,我收到以下编译错误:

  • 获取错误:(类型窗口中不存在属性“MktoForms2”