]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
types: fix Transition exported typing
authorEvan You <yyx990803@gmail.com>
Thu, 21 Nov 2019 15:21:09 +0000 (10:21 -0500)
committerEvan You <yyx990803@gmail.com>
Thu, 21 Nov 2019 15:21:09 +0000 (10:21 -0500)
packages/runtime-core/src/apiCreateComponent.ts
packages/runtime-core/src/components/KeepAlive.ts
packages/runtime-core/src/components/Transition.ts

index bd23f6785b437ca7604304cb72030bd8fb006b53..075b289ba7753f4755d3e5cdc2be480f0fb1b778 100644 (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,
index 50bb946cc0a6aa4302040f5d034b8087756e4898..3040b453b4d511c9d2d548aeb9e707f88278438f 100644 (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
index c02265fda81e4a04a112e2c0ae488f196d92bcb9..2dda75ae9ee1391f42eca43adbac51be6e78821a 100644 (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