types: fix Transition exported typing

This commit is contained in:
Evan You 2019-11-21 10:21:09 -05:00
parent 79f23a2f77
commit 21c41b3228
3 changed files with 24 additions and 7 deletions

View File

@ -11,6 +11,11 @@ import { ExtractPropTypes, ComponentPropsOptions } from './componentProps'
import { isFunction } from '@vue/shared'
import { VNodeProps } from './vnode'
// createComponent 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 artifical types
// for TSX / manual render function / IDE support.
// overload 1: direct setup function
// (uses user defined props interface)
export function createComponent<Props, RawBindings = object>(
@ -81,7 +86,6 @@ export function createComponent<
>(
options: ComponentOptionsWithObjectProps<PropsOptions, RawBindings, D, C, M>
): {
// for Vetur and TSX support
new (): ComponentPublicInstance<
ExtractPropTypes<PropsOptions>,
RawBindings,

View File

@ -210,6 +210,7 @@ const KeepAliveImpl = {
}
// export the public type for h/tsx inference
// also to avoid inline import() in generated d.ts files
export const KeepAlive = (KeepAliveImpl as any) as {
new (): {
$props: KeepAliveProps

View File

@ -1,5 +1,9 @@
import { createComponent } from '../apiCreateComponent'
import { getCurrentInstance, ComponentInternalInstance } from '../component'
import {
getCurrentInstance,
ComponentInternalInstance,
SetupContext,
ComponentOptions
} from '../component'
import { cloneVNode, Comment, isSameVNodeType, VNode } from '../vnode'
import { warn } from '../warning'
import { isKeepAlive } from './KeepAlive'
@ -26,9 +30,9 @@ export interface TransitionProps {
onLeaveCancelled?: (el: any) => void
}
export const Transition = createComponent({
const TransitionImpl = {
name: `Transition`,
setup(props: TransitionProps, { slots }) {
setup(props: TransitionProps, { slots }: SetupContext) {
const instance = getCurrentInstance()!
let isLeaving = false
let isMounted = false
@ -108,10 +112,10 @@ export const Transition = createComponent({
return child
}
}
})
}
if (__DEV__) {
;(Transition as any).props = {
;(TransitionImpl as ComponentOptions).props = {
mode: String,
appear: Boolean,
// enter
@ -127,6 +131,14 @@ if (__DEV__) {
}
}
// export the public type for h/tsx inference
// also to avoid inline import() in generated d.ts files
export const Transition = (TransitionImpl as any) as {
new (): {
$props: TransitionProps
}
}
export interface TransitionData {
beforeEnter(el: object): void
enter(el: object): void