Skip to content

Commit 5e0f6d5

Browse files
andyliziyyx990803
authored andcommitted
fix(types/custom-element): defineCustomElement with required props (#11578)
1 parent 8bcaad4 commit 5e0f6d5

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

Diff for: packages-private/dts-test/defineCustomElement.test-d.ts

+33
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,37 @@ describe('defineCustomElement using defineComponent return type', () => {
9999
expectType<number | undefined>(instance.a)
100100
instance.a = 42
101101
})
102+
103+
test('with required props', () => {
104+
const Comp1Vue = defineComponent({
105+
props: {
106+
a: { type: Number, required: true },
107+
},
108+
})
109+
const Comp = defineCustomElement(Comp1Vue)
110+
expectType<VueElementConstructor>(Comp)
111+
112+
const instance = new Comp()
113+
expectType<number>(instance.a)
114+
instance.a = 42
115+
})
116+
117+
test('with default props', () => {
118+
const Comp1Vue = defineComponent({
119+
props: {
120+
a: {
121+
type: Number,
122+
default: 1,
123+
validator: () => true,
124+
},
125+
},
126+
emits: ['click'],
127+
})
128+
const Comp = defineCustomElement(Comp1Vue)
129+
expectType<VueElementConstructor>(Comp)
130+
131+
const instance = new Comp()
132+
expectType<number>(instance.a)
133+
instance.a = 42
134+
})
102135
})

Diff for: packages/runtime-dom/src/apiCustomElement.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
type ComponentOptionsBase,
1010
type ComponentOptionsMixin,
1111
type ComponentProvideOptions,
12+
type ComponentPublicInstance,
1213
type ComputedOptions,
1314
type ConcreteComponent,
1415
type CreateAppFunction,
@@ -153,14 +154,13 @@ export function defineCustomElement<
153154
// overload 3: defining a custom element from the returned value of
154155
// `defineComponent`
155156
export function defineCustomElement<
156-
T extends DefineComponent<any, any, any, any>,
157+
// this should be `ComponentPublicInstanceConstructor` but that type is not exported
158+
T extends { new (...args: any[]): ComponentPublicInstance<any> },
157159
>(
158160
options: T,
159161
extraOptions?: CustomElementOptions,
160162
): VueElementConstructor<
161-
T extends DefineComponent<infer P, any, any, any>
162-
? ExtractPropTypes<P>
163-
: unknown
163+
T extends DefineComponent<infer P, any, any, any> ? P : unknown
164164
>
165165

166166
/*! #__NO_SIDE_EFFECTS__ */

0 commit comments

Comments
 (0)