]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(types): h support for resolveComponent (#2402)
authorCarlos Rodrigues <david-181@hotmail.com>
Tue, 20 Oct 2020 19:56:29 +0000 (20:56 +0100)
committerGitHub <noreply@github.com>
Tue, 20 Oct 2020 19:56:29 +0000 (15:56 -0400)
close #2357

packages/runtime-core/src/h.ts
packages/runtime-core/src/helpers/resolveAssets.ts
test-dts/h.test-d.ts

index bf03247f2cb45bb66789de4aa31ef213759c000b..cb87cf6ee3c520efe71a12a0b502bbd2d5c0636a 100644 (file)
@@ -10,7 +10,12 @@ import { Teleport, TeleportProps } from './components/Teleport'
 import { Suspense, SuspenseProps } from './components/Suspense'
 import { isObject, isArray } from '@vue/shared'
 import { RawSlots } from './componentSlots'
-import { FunctionalComponent, Component, ComponentOptions } from './component'
+import {
+  FunctionalComponent,
+  Component,
+  ComponentOptions,
+  ConcreteComponent
+} from './component'
 import { EmitsOptions } from './componentEmits'
 import { DefineComponent } from './apiDefineComponent'
 
@@ -112,6 +117,17 @@ export function h<P, E extends EmitsOptions = {}>(
 // catch-all for generic component types
 export function h(type: Component, children?: RawChildren): VNode
 
+// concrete component
+export function h<P>(
+  type: ConcreteComponent | string,
+  children?: RawChildren
+): VNode
+export function h<P>(
+  type: ConcreteComponent<P> | string,
+  props?: (RawProps & P) | ({} extends P ? null : never),
+  children?: RawChildren
+): VNode
+
 // component without props
 export function h(
   type: Component,
index 59c9f4cc14cd930d92f7175268538db45746d764..2ed49fba085dfb3cee7ccb876f3d7ab82cb718d8 100644 (file)
@@ -16,9 +16,7 @@ const DIRECTIVES = 'directives'
 /**
  * @private
  */
-export function resolveComponent(
-  name: string
-): ConcreteComponent | string | undefined {
+export function resolveComponent(name: string): ConcreteComponent | string {
   return resolveAsset(COMPONENTS, name) || name
 }
 
index 877c62860cdf5baba809f6802a51553cea1a499f..c71b54a2aa8ef8b5ef9e16b305e54c564b797860 100644 (file)
@@ -8,7 +8,8 @@ import {
   Suspense,
   Component,
   expectError,
-  expectAssignable
+  expectAssignable,
+  resolveComponent
 } from './index'
 
 describe('h inference w/ element', () => {
@@ -224,3 +225,11 @@ describe('Boolean prop implicit false', () => {
   // @ts-expect-error
   expectError(h(RequiredComponent, {}))
 })
+
+// #2357
+describe('resolveComponent should work', () => {
+  h(resolveComponent('test'))
+  h(resolveComponent('test'), {
+    message: '1'
+  })
+})