项目结构:
☁ 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。现在,我们需要用这两个自定义 HTML 属性扩展React 的HTMLAttributes 接口。
选项 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;
}
}
输出: