From 1f2a652a9d2e3bec472fb1786a4c16d6ccfa1fb1 Mon Sep 17 00:00:00 2001 From: Carlos Rodrigues Date: Tue, 20 Oct 2020 20:56:29 +0100 Subject: [PATCH] fix(types): h support for resolveComponent (#2402) close #2357 --- 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 bf03247f2..cb87cf6ee 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 59c9f4cc1..2ed49fba0 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 877c62860..c71b54a2a 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', () => { @@ -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' + }) +})