Skip to content

Commit

Permalink
fix(types): better typing for direct setup signature of defineCompone…
Browse files Browse the repository at this point in the history
…nt (vuejs#10357)

close vuejs#8604
close vuejs#8855
  • Loading branch information
s-montigny-desautels authored and OnlyWick committed Feb 27, 2024
1 parent 8e3a666 commit 9097aa7
Showing 1 changed file with 26 additions and 2 deletions.
28 changes: 26 additions & 2 deletions packages/runtime-core/src/apiDefineComponent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,30 @@ export type DefineComponent<
> &
PP

type DirectSetupComponent<
P extends Record<string, any>,
E extends EmitsOptions = {},
S extends SlotsType = SlotsType,
Props = P & EmitsToProps<E>,
PP = PublicProps,
> = new (
props: Props & PP,
) => CreateComponentPublicInstance<
Props,
{},
{},
{},
{},
ComponentOptionsMixin,
ComponentOptionsMixin,
E,
PP,
{},
false,
{},
S
>

// defineComponent is a utility that is primarily used for type inference
// when declaring components. Type inference is provided in the component
// options (provided as the argument). The returned value has artificial types
Expand All @@ -111,7 +135,7 @@ export function defineComponent<
emits?: E | EE[]
slots?: S
},
): (props: Props & EmitsToProps<E>) => any
): DirectSetupComponent<Props, E, S>
export function defineComponent<
Props extends Record<string, any>,
E extends EmitsOptions = {},
Expand All @@ -127,7 +151,7 @@ export function defineComponent<
emits?: E | EE[]
slots?: S
},
): (props: Props & EmitsToProps<E>) => any
): DirectSetupComponent<Props, E, S>

// overload 2: object format with no props
// (uses user defined props interface)
Expand Down

0 comments on commit 9097aa7

Please sign in to comment.