mirror of https://github.com/vuejs/core.git
				
				
				
			
		
			
				
	
	
		
			316 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
			
		
		
	
	
			316 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
| import type {
 | |
|   ComponentInjectOptions,
 | |
|   ComponentOptions,
 | |
|   ComponentOptionsBase,
 | |
|   ComponentOptionsMixin,
 | |
|   ComponentProvideOptions,
 | |
|   ComputedOptions,
 | |
|   MethodOptions,
 | |
|   RenderFunction,
 | |
| } from './componentOptions'
 | |
| import type {
 | |
|   AllowedComponentProps,
 | |
|   Component,
 | |
|   ComponentCustomProps,
 | |
|   GlobalComponents,
 | |
|   GlobalDirectives,
 | |
|   SetupContext,
 | |
| } from './component'
 | |
| import type {
 | |
|   ComponentObjectPropsOptions,
 | |
|   ComponentPropsOptions,
 | |
|   ExtractDefaultPropTypes,
 | |
|   ExtractPropTypes,
 | |
| } from './componentProps'
 | |
| import type {
 | |
|   EmitsOptions,
 | |
|   EmitsToProps,
 | |
|   TypeEmitsToOptions,
 | |
| } from './componentEmits'
 | |
| import { type IsKeyValues, extend, isFunction } from '@vue/shared'
 | |
| import type { VNodeProps } from './vnode'
 | |
| import type {
 | |
|   ComponentPublicInstanceConstructor,
 | |
|   CreateComponentPublicInstanceWithMixins,
 | |
| } from './componentPublicInstance'
 | |
| import type { SlotsType } from './componentSlots'
 | |
| import type { Directive } from './directives'
 | |
| import type { ComponentTypeEmits } from './apiSetupHelpers'
 | |
| 
 | |
| export type PublicProps = VNodeProps &
 | |
|   AllowedComponentProps &
 | |
|   ComponentCustomProps
 | |
| 
 | |
| type ResolveProps<PropsOrPropOptions, E extends EmitsOptions> = Readonly<
 | |
|   PropsOrPropOptions extends ComponentPropsOptions
 | |
|     ? ExtractPropTypes<PropsOrPropOptions>
 | |
|     : PropsOrPropOptions
 | |
| > &
 | |
|   ({} extends E ? {} : EmitsToProps<E>)
 | |
| 
 | |
| export type DefineComponent<
 | |
|   PropsOrPropOptions = {},
 | |
|   RawBindings = {},
 | |
|   D = {},
 | |
|   C extends ComputedOptions = ComputedOptions,
 | |
|   M extends MethodOptions = MethodOptions,
 | |
|   Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
 | |
|   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
 | |
|   E extends EmitsOptions = {},
 | |
|   EE extends string = string,
 | |
|   PP = PublicProps,
 | |
|   Props = ResolveProps<PropsOrPropOptions, E>,
 | |
|   Defaults = ExtractDefaultPropTypes<PropsOrPropOptions>,
 | |
|   S extends SlotsType = {},
 | |
|   LC extends Record<string, Component> = {},
 | |
|   Directives extends Record<string, Directive> = {},
 | |
|   Exposed extends string = string,
 | |
|   Provide extends ComponentProvideOptions = ComponentProvideOptions,
 | |
|   MakeDefaultsOptional extends boolean = true,
 | |
|   TypeRefs extends Record<string, unknown> = {},
 | |
|   TypeEl extends Element = any,
 | |
| > = ComponentPublicInstanceConstructor<
 | |
|   CreateComponentPublicInstanceWithMixins<
 | |
|     Props,
 | |
|     RawBindings,
 | |
|     D,
 | |
|     C,
 | |
|     M,
 | |
|     Mixin,
 | |
|     Extends,
 | |
|     E,
 | |
|     PP,
 | |
|     Defaults,
 | |
|     MakeDefaultsOptional,
 | |
|     {},
 | |
|     S,
 | |
|     LC & GlobalComponents,
 | |
|     Directives & GlobalDirectives,
 | |
|     Exposed,
 | |
|     TypeRefs,
 | |
|     TypeEl
 | |
|   >
 | |
| > &
 | |
|   ComponentOptionsBase<
 | |
|     Props,
 | |
|     RawBindings,
 | |
|     D,
 | |
|     C,
 | |
|     M,
 | |
|     Mixin,
 | |
|     Extends,
 | |
|     E,
 | |
|     EE,
 | |
|     Defaults,
 | |
|     {},
 | |
|     string,
 | |
|     S,
 | |
|     LC & GlobalComponents,
 | |
|     Directives & GlobalDirectives,
 | |
|     Exposed,
 | |
|     Provide
 | |
|   > &
 | |
|   PP
 | |
| 
 | |
| export type DefineSetupFnComponent<
 | |
|   P extends Record<string, any>,
 | |
|   E extends EmitsOptions = {},
 | |
|   S extends SlotsType = SlotsType,
 | |
|   Props = P & EmitsToProps<E>,
 | |
|   PP = PublicProps,
 | |
| > = new (
 | |
|   props: Props & PP,
 | |
| ) => CreateComponentPublicInstanceWithMixins<
 | |
|   Props,
 | |
|   {},
 | |
|   {},
 | |
|   {},
 | |
|   {},
 | |
|   ComponentOptionsMixin,
 | |
|   ComponentOptionsMixin,
 | |
|   E,
 | |
|   PP,
 | |
|   {},
 | |
|   false,
 | |
|   {},
 | |
|   S
 | |
| >
 | |
| 
 | |
| type ToResolvedProps<Props, Emits extends EmitsOptions> = Readonly<Props> &
 | |
|   Readonly<EmitsToProps<Emits>>
 | |
| 
 | |
| // 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
 | |
| // for TSX / manual render function / IDE support.
 | |
| 
 | |
| // overload 1: direct setup function
 | |
| // (uses user defined props interface)
 | |
| export function defineComponent<
 | |
|   Props extends Record<string, any>,
 | |
|   E extends EmitsOptions = {},
 | |
|   EE extends string = string,
 | |
|   S extends SlotsType = {},
 | |
| >(
 | |
|   setup: (
 | |
|     props: Props,
 | |
|     ctx: SetupContext<E, S>,
 | |
|   ) => RenderFunction | Promise<RenderFunction>,
 | |
|   options?: Pick<ComponentOptions, 'name' | 'inheritAttrs'> & {
 | |
|     props?: (keyof Props)[]
 | |
|     emits?: E | EE[]
 | |
|     slots?: S
 | |
|   },
 | |
| ): DefineSetupFnComponent<Props, E, S>
 | |
| export function defineComponent<
 | |
|   Props extends Record<string, any>,
 | |
|   E extends EmitsOptions = {},
 | |
|   EE extends string = string,
 | |
|   S extends SlotsType = {},
 | |
| >(
 | |
|   setup: (
 | |
|     props: Props,
 | |
|     ctx: SetupContext<E, S>,
 | |
|   ) => RenderFunction | Promise<RenderFunction>,
 | |
|   options?: Pick<ComponentOptions, 'name' | 'inheritAttrs'> & {
 | |
|     props?: ComponentObjectPropsOptions<Props>
 | |
|     emits?: E | EE[]
 | |
|     slots?: S
 | |
|   },
 | |
| ): DefineSetupFnComponent<Props, E, S>
 | |
| 
 | |
| // overload 2: defineComponent with options object, infer props from options
 | |
| export function defineComponent<
 | |
|   // props
 | |
|   TypeProps,
 | |
|   RuntimePropsOptions extends
 | |
|     ComponentObjectPropsOptions = ComponentObjectPropsOptions,
 | |
|   RuntimePropsKeys extends string = string,
 | |
|   // emits
 | |
|   TypeEmits extends ComponentTypeEmits = {},
 | |
|   RuntimeEmitsOptions extends EmitsOptions = {},
 | |
|   RuntimeEmitsKeys extends string = string,
 | |
|   // other options
 | |
|   Data = {},
 | |
|   SetupBindings = {},
 | |
|   Computed extends ComputedOptions = {},
 | |
|   Methods extends MethodOptions = {},
 | |
|   Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
 | |
|   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
 | |
|   InjectOptions extends ComponentInjectOptions = {},
 | |
|   InjectKeys extends string = string,
 | |
|   Slots extends SlotsType = {},
 | |
|   LocalComponents extends Record<string, Component> = {},
 | |
|   Directives extends Record<string, Directive> = {},
 | |
|   Exposed extends string = string,
 | |
|   Provide extends ComponentProvideOptions = ComponentProvideOptions,
 | |
|   // resolved types
 | |
|   ResolvedEmits extends EmitsOptions = {} extends RuntimeEmitsOptions
 | |
|     ? TypeEmitsToOptions<TypeEmits>
 | |
|     : RuntimeEmitsOptions,
 | |
|   InferredProps = IsKeyValues<TypeProps> extends true
 | |
|     ? TypeProps
 | |
|     : string extends RuntimePropsKeys
 | |
|       ? ComponentObjectPropsOptions extends RuntimePropsOptions
 | |
|         ? {}
 | |
|         : ExtractPropTypes<RuntimePropsOptions>
 | |
|       : { [key in RuntimePropsKeys]?: any },
 | |
|   TypeRefs extends Record<string, unknown> = {},
 | |
|   TypeEl extends Element = any,
 | |
| >(
 | |
|   options: {
 | |
|     props?: (RuntimePropsOptions & ThisType<void>) | RuntimePropsKeys[]
 | |
|     /**
 | |
|      * @private for language-tools use only
 | |
|      */
 | |
|     __typeProps?: TypeProps
 | |
|     /**
 | |
|      * @private for language-tools use only
 | |
|      */
 | |
|     __typeEmits?: TypeEmits
 | |
|     /**
 | |
|      * @private for language-tools use only
 | |
|      */
 | |
|     __typeRefs?: TypeRefs
 | |
|     /**
 | |
|      * @private for language-tools use only
 | |
|      */
 | |
|     __typeEl?: TypeEl
 | |
|   } & ComponentOptionsBase<
 | |
|     ToResolvedProps<InferredProps, ResolvedEmits>,
 | |
|     SetupBindings,
 | |
|     Data,
 | |
|     Computed,
 | |
|     Methods,
 | |
|     Mixin,
 | |
|     Extends,
 | |
|     RuntimeEmitsOptions,
 | |
|     RuntimeEmitsKeys,
 | |
|     {}, // Defaults
 | |
|     InjectOptions,
 | |
|     InjectKeys,
 | |
|     Slots,
 | |
|     LocalComponents,
 | |
|     Directives,
 | |
|     Exposed,
 | |
|     Provide
 | |
|   > &
 | |
|     ThisType<
 | |
|       CreateComponentPublicInstanceWithMixins<
 | |
|         ToResolvedProps<InferredProps, ResolvedEmits>,
 | |
|         SetupBindings,
 | |
|         Data,
 | |
|         Computed,
 | |
|         Methods,
 | |
|         Mixin,
 | |
|         Extends,
 | |
|         ResolvedEmits,
 | |
|         {},
 | |
|         {},
 | |
|         false,
 | |
|         InjectOptions,
 | |
|         Slots,
 | |
|         LocalComponents,
 | |
|         Directives,
 | |
|         Exposed
 | |
|       >
 | |
|     >,
 | |
| ): DefineComponent<
 | |
|   InferredProps,
 | |
|   SetupBindings,
 | |
|   Data,
 | |
|   Computed,
 | |
|   Methods,
 | |
|   Mixin,
 | |
|   Extends,
 | |
|   ResolvedEmits,
 | |
|   RuntimeEmitsKeys,
 | |
|   PublicProps,
 | |
|   ToResolvedProps<InferredProps, ResolvedEmits>,
 | |
|   ExtractDefaultPropTypes<RuntimePropsOptions>,
 | |
|   Slots,
 | |
|   LocalComponents,
 | |
|   Directives,
 | |
|   Exposed,
 | |
|   Provide,
 | |
|   // MakeDefaultsOptional - if TypeProps is provided, set to false to use
 | |
|   // user props types verbatim
 | |
|   unknown extends TypeProps ? true : false,
 | |
|   TypeRefs,
 | |
|   TypeEl
 | |
| >
 | |
| 
 | |
| // implementation, close to no-op
 | |
| /*! #__NO_SIDE_EFFECTS__ */
 | |
| export function defineComponent(
 | |
|   options: unknown,
 | |
|   extraOptions?: ComponentOptions,
 | |
| ) {
 | |
|   return isFunction(options)
 | |
|     ? // #8236: extend call and options.name access are considered side-effects
 | |
|       // by Rollup, so we have to wrap it in a pure-annotated IIFE.
 | |
|       /*@__PURE__*/ (() =>
 | |
|         extend({ name: options.name }, extraOptions, { setup: options }))()
 | |
|     : options
 | |
| }
 |