fix(types): app.component should accept defineComponent return type

fix #730
This commit is contained in:
Evan You 2020-02-15 21:04:29 -05:00
parent 9d2ac6675a
commit 57ee5df364
3 changed files with 19 additions and 13 deletions

View File

@ -1,4 +1,9 @@
import { Component, Data, validateComponentName } from './component'
import {
Component,
Data,
validateComponentName,
PublicAPIComponent
} from './component'
import { ComponentOptions } from './apiOptions'
import { ComponentPublicInstance } from './componentProxy'
import { Directive, validateDirectiveName } from './directives'
@ -82,10 +87,7 @@ export function createAppContext(): AppContext {
}
export type CreateAppFunction<HostElement> = (
rootComponent:
| Component
// for compatibility with defineComponent() return types
| { new (): ComponentPublicInstance<any, any, any, any, any> },
rootComponent: PublicAPIComponent,
rootProps?: Data | null
) => App<HostElement>
@ -156,7 +158,7 @@ export function createAppAPI<HostNode, HostElement>(
return app
},
component(name: string, component?: Component): any {
component(name: string, component?: PublicAPIComponent): any {
if (__DEV__) {
validateComponentName(name, context.config)
}
@ -166,7 +168,7 @@ export function createAppAPI<HostNode, HostElement>(
if (__DEV__ && context.components[name]) {
warn(`Component "${name}" has already been registered in target app.`)
}
context.components[name] = component
context.components[name] = component as Component
return app
},

View File

@ -1,10 +1,10 @@
import {
ComponentInternalInstance,
Data,
Component,
SetupContext,
RenderFunction,
SFCInternalOptions
SFCInternalOptions,
PublicAPIComponent
} from './component'
import {
isFunction,
@ -70,10 +70,7 @@ export interface ComponentOptionsBase<
push: (item: any) => void,
parentInstance: ComponentInternalInstance
) => void
components?: Record<
string,
Component | { new (): ComponentPublicInstance<any, any, any, any, any> }
>
components?: Record<string, PublicAPIComponent>
directives?: Record<string, Directive>
inheritAttrs?: boolean

View File

@ -53,6 +53,13 @@ export interface FunctionalComponent<P = {}> extends SFCInternalOptions {
}
export type Component = ComponentOptions | FunctionalComponent
// A type used in public APIs where a component type is expected.
// The constructor type is an artificial type returned by defineComponent().
export type PublicAPIComponent =
| Component
| { new (): ComponentPublicInstance<any, any, any, any, any> }
export { ComponentOptions }
type LifecycleHook = Function[] | null