From 3ee7d0afde9150072943181b300b698158f10704 Mon Sep 17 00:00:00 2001 From: pikax Date: Sat, 17 Oct 2020 09:18:56 +0100 Subject: [PATCH] types(h): support for resolveComponent --- packages/runtime-core/src/h.ts | 18 +++++++++++++++++- .../runtime-core/src/helpers/resolveAssets.ts | 4 +--- test-dts/h.test-d.ts | 11 ++++++++++- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/packages/runtime-core/src/h.ts b/packages/runtime-core/src/h.ts index bf03247f2cb..cb87cf6ee3c 100644 --- a/packages/runtime-core/src/h.ts +++ b/packages/runtime-core/src/h.ts @@ -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( // catch-all for generic component types export function h(type: Component, children?: RawChildren): VNode +// concrete component +export function h

( + type: ConcreteComponent | string, + children?: RawChildren +): VNode +export function h

( + type: ConcreteComponent

| string, + props?: (RawProps & P) | ({} extends P ? null : never), + children?: RawChildren +): VNode + // component without props export function h( type: Component, diff --git a/packages/runtime-core/src/helpers/resolveAssets.ts b/packages/runtime-core/src/helpers/resolveAssets.ts index 59c9f4cc14c..2ed49fba085 100644 --- a/packages/runtime-core/src/helpers/resolveAssets.ts +++ b/packages/runtime-core/src/helpers/resolveAssets.ts @@ -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 } diff --git a/test-dts/h.test-d.ts b/test-dts/h.test-d.ts index 4376eaf979e..5dc642708df 100644 --- a/test-dts/h.test-d.ts +++ b/test-dts/h.test-d.ts @@ -8,7 +8,8 @@ import { Suspense, Component, expectError, - expectAssignable + expectAssignable, + resolveComponent } from './index' describe('h inference w/ element', () => { @@ -198,3 +199,11 @@ describe('component w/ props w/ default value', () => { h(MyComponent, {}) }) + +// #2357 +describe('resolveComponent should work', () => { + h(resolveComponent('test')) + h(resolveComponent('test'), { + message: '1' + }) +})