Procházet zdrojové kódy

types: accept defineComponent return types in app.mount

Evan You před 6 roky
rodič
revize
7df5e70c83

+ 4 - 1
packages/runtime-core/src/apiCreateApp.ts

@@ -17,7 +17,10 @@ export interface App<HostElement = any> {
   directive(name: string): Directive | undefined
   directive(name: string, directive: Directive): this
   mount(
-    rootComponent: Component,
+    rootComponent:
+      | Component
+      // for compatibility with defineComponent() return types
+      | { new (): ComponentPublicInstance<any, any, any, any, any> },
     rootContainer: HostElement | string,
     rootProps?: Data
   ): ComponentPublicInstance

+ 20 - 1
test-dts/defineComponent.test-d.tsx

@@ -1,5 +1,5 @@
 import { expectError, expectType } from 'tsd'
-import { describe, defineComponent, PropType, ref } from './index'
+import { describe, defineComponent, PropType, ref, createApp } from './index'
 
 describe('with object props', () => {
   interface ExpectedProps {
@@ -240,3 +240,22 @@ describe('type inference w/ options API', () => {
     }
   })
 })
+
+describe('compatibility w/ createApp', () => {
+  const comp = defineComponent({})
+  createApp().mount(comp, '#hello')
+
+  const comp2 = defineComponent({
+    props: { foo: String }
+  })
+  createApp().mount(comp2, '#hello')
+
+  const comp3 = defineComponent({
+    setup() {
+      return {
+        a: 1
+      }
+    }
+  })
+  createApp().mount(comp3, '#hello')
+})