项目结构:
☁ extends-react-types tree -I 'node_modules'
.
├── App.tsx
├── index.d.ts
├── package-lock.json
├── package.json
└── tsconfig.json
0 directories, 5 files
软件包版本:
{
"name": "extends-react-types",
"devDependencies": {
"@types/react": "^16.9.56",
"typescript": "^4.3.5"
},
"dependencies": {
"react": "^16.8.6"
}
}
tsconfig.json
:
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom"
],
"allowSyntheticDefaultImports": true,
"moduleResolution": "Node",
"jsx": "preserve",
}
}
App.tsx
:
import React from 'react';
interface HomeProps extends React.ComponentPropsWithRef<'div'> {}
export default function Home(props: HomeProps) {
return (
<div>
<p _name="name" _error={true}>
123
</p>
</div>
);
}
您可以看到,p
元素中有两个自定义 HTML 属性:_name
和 _error
。现在,我们需要扩展 React
的 HTMLAttributes
接口,以包含这两个自定义 HTML 属性。
选项 1:
index.d.ts
:
import 'react';
declare module 'react' {
interface HTMLAttributes<T> extends AriaAttributes, DOMAttributes<T> {
_name?: string;
_error?: boolean;
}
}
输出:
选项2:
declare namespace React {
interface HTMLAttributes<T> extends AriaAttributes, DOMAttributes<T> {
_name?: string;
_error?: boolean;
}
}
输出:
(注:该段文字为格式说明,无需翻译)
data-
属性,例如data-custom
,这是有效的。 - meda