Skip to content

Commit fa320e6

Browse files
authored
feat: layout props type extends HTMLAttributes (#3258)
1 parent 335155e commit fa320e6

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

components/layout/layout.tsx

+18-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,26 @@
1-
import { createVNode, defineComponent, inject, provide, toRefs, ref } from 'vue';
1+
import {
2+
createVNode,
3+
defineComponent,
4+
inject,
5+
provide,
6+
toRefs,
7+
ref,
8+
ExtractPropTypes,
9+
HTMLAttributes,
10+
} from 'vue';
211
import PropTypes from '../_util/vue-types';
312
import classNames from '../_util/classNames';
413
import { defaultConfigProvider } from '../config-provider';
514
import { flattenChildren } from '../_util/props-util';
615

7-
export const BasicProps = {
16+
export const basicProps = {
817
prefixCls: PropTypes.string,
918
hasSider: PropTypes.looseBool,
1019
tagName: PropTypes.string,
1120
};
1221

22+
export type BasicProps = Partial<ExtractPropTypes<typeof basicProps>> & HTMLAttributes;
23+
1324
export interface SiderHookProvider {
1425
addSider?: (id: string) => void;
1526
removeSider?: (id: string) => void;
@@ -23,9 +34,8 @@ type GeneratorArgument = {
2334

2435
function generator({ suffixCls, tagName, name }: GeneratorArgument) {
2536
return (BasicComponent: typeof Basic) => {
26-
return defineComponent({
37+
const Adapter = defineComponent<BasicProps>({
2738
name,
28-
props: BasicProps,
2939
setup(props, { slots }) {
3040
const { getPrefixCls } = inject('configProvider', defaultConfigProvider);
3141
return () => {
@@ -44,19 +54,21 @@ function generator({ suffixCls, tagName, name }: GeneratorArgument) {
4454
};
4555
},
4656
});
57+
Adapter.props = basicProps;
58+
return Adapter;
4759
};
4860
}
4961

5062
const Basic = defineComponent({
51-
props: BasicProps,
63+
props: basicProps,
5264
setup(props, { slots }) {
5365
const { prefixCls, tagName } = toRefs(props);
5466
return () => createVNode(tagName.value, { class: prefixCls.value }, slots.default?.());
5567
},
5668
});
5769

5870
const BasicLayout = defineComponent({
59-
props: BasicProps,
71+
props: basicProps,
6072
setup(props, { slots }) {
6173
const siders = ref<string[]>([]);
6274
const siderHookProvider: SiderHookProvider = {

0 commit comments

Comments
 (0)