由于 React 16 现在允许自定义 DOM 属性,我尝试在我的 Typescript 代码中利用它:
import * as React from 'react';
<div className="page" size="A4">
</div>
但收到此错误消息:
错误 TS2339:“DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>”类型上不存在属性“size”。
这个线程建议做一个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>
理想情况下,最后一个是我的首选解决方案。我想在size
自page
定义标签旁边使用自定义属性。
配置文件
{
"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
}
}