From 21c41b3228267bb2b7861898eb5674373a752cb4 Mon Sep 17 00:00:00 2001 From: Evan You Date: Thu, 21 Nov 2019 10:21:09 -0500 Subject: [PATCH] types: fix Transition exported typing --- .../runtime-core/src/apiCreateComponent.ts | 6 ++++- .../runtime-core/src/components/KeepAlive.ts | 1 + .../runtime-core/src/components/Transition.ts | 24 ++++++++++++++----- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/packages/runtime-core/src/apiCreateComponent.ts b/packages/runtime-core/src/apiCreateComponent.ts index bd23f6785b..075b289ba7 100644 --- a/packages/runtime-core/src/apiCreateComponent.ts +++ b/packages/runtime-core/src/apiCreateComponent.ts @@ -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( @@ -81,7 +86,6 @@ export function createComponent< >( options: ComponentOptionsWithObjectProps ): { - // for Vetur and TSX support new (): ComponentPublicInstance< ExtractPropTypes, RawBindings, diff --git a/packages/runtime-core/src/components/KeepAlive.ts b/packages/runtime-core/src/components/KeepAlive.ts index 50bb946cc0..3040b453b4 100644 --- a/packages/runtime-core/src/components/KeepAlive.ts +++ b/packages/runtime-core/src/components/KeepAlive.ts @@ -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 diff --git a/packages/runtime-core/src/components/Transition.ts b/packages/runtime-core/src/components/Transition.ts index c02265fda8..2dda75ae9e 100644 --- a/packages/runtime-core/src/components/Transition.ts +++ b/packages/runtime-core/src/components/Transition.ts @@ -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 -- 2.47.3