【发布时间】:2018-02-23 05:33:59
【问题描述】:
由于 React 16 现在允许 custom DOM attributes,我尝试在我的 Typescript 代码中利用它:
import * as React from 'react';
<div className="page" size="A4">
</div>
但收到此错误消息:
错误 TS2339:类型上不存在属性“大小” 'DetailedHTMLProps
, HTMLDivElement>'.
这个thread建议做一个module augmentation,所以我这样尝试:
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>
理想情况下,最后一个是我的首选解决方案。我想在 page 自定义标签旁边使用 size 自定义属性。
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
}
}
【问题讨论】:
-
我对 TypeScript 了解不多,但对于一个想法-可能很愚蠢-,试试
data-size怎么样? -
哇...它摆脱了我的错误,并编译了!是什么让您想到了这一点,为什么与任何“非破折号”名称(例如大小)相比,它会起作用?你能把它写成答案让我验证吗?
标签: reactjs typescript