From 31f7d51dda999f046c9cab06968d8a4eed1e8126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=B6=E8=BF=9C=E6=96=B9?= Date: Tue, 5 Dec 2023 21:20:46 +0800 Subject: [PATCH 1/4] types(runtime-core): add `h` function overload --- packages/runtime-core/src/h.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/runtime-core/src/h.ts b/packages/runtime-core/src/h.ts index 4ca90262f2a..25c555f6d7f 100644 --- a/packages/runtime-core/src/h.ts +++ b/packages/runtime-core/src/h.ts @@ -78,7 +78,24 @@ interface Constructor

{ // The following is a series of overloads for providing props validation of // manually written render functions. +type HTMLElementEventHandler = { + [K in keyof HTMLElementEventMap as `on${Capitalize}`]?: ( + ev: HTMLElementEventMap[K] + ) => any +} + // element +export function h( + type: K, + children?: RawChildren +): VNode +export function h( + type: K, + props?: (RawProps & HTMLElementEventHandler) | null, + children?: RawChildren | RawSlots +): VNode + +// custom element export function h(type: string, children?: RawChildren): VNode export function h( type: string, From f9cf7da0ca091303c12c8b812c8e45a9ea0e19dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=B6=E8=BF=9C=E6=96=B9?= Date: Tue, 5 Dec 2023 22:24:04 +0800 Subject: [PATCH 2/4] chore: update comment --- packages/runtime-core/src/h.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/runtime-core/src/h.ts b/packages/runtime-core/src/h.ts index 25c555f6d7f..038d8d2fbc7 100644 --- a/packages/runtime-core/src/h.ts +++ b/packages/runtime-core/src/h.ts @@ -75,15 +75,15 @@ interface Constructor

{ new (...args: any[]): { $props: P } } -// The following is a series of overloads for providing props validation of -// manually written render functions. - type HTMLElementEventHandler = { [K in keyof HTMLElementEventMap as `on${Capitalize}`]?: ( ev: HTMLElementEventMap[K] ) => any } +// The following is a series of overloads for providing props validation of +// manually written render functions. + // element export function h( type: K, From 767bf3f4d2a250c1bc9669af2aac75af7cba1cd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=B6=E8=BF=9C=E6=96=B9?= Date: Fri, 8 Dec 2023 14:20:18 +0800 Subject: [PATCH 3/4] chore: add test case --- packages/dts-test/h.test-d.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/dts-test/h.test-d.ts b/packages/dts-test/h.test-d.ts index f2e984b49b8..c8c09ec83ab 100644 --- a/packages/dts-test/h.test-d.ts +++ b/packages/dts-test/h.test-d.ts @@ -32,6 +32,17 @@ describe('h inference w/ element', () => { // slots const slots = { default: () => {} } // RawSlots h('div', {}, slots) + // events + h('div', { + onClick: e => { + expectType(e) + } + }) + h('input', { + onFocus(e) { + expectType(e) + } + }) }) describe('h inference w/ Fragment', () => { From a47047346c64f329d67d2589f5e74eff5a4a2cfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=B6=E8=BF=9C=E6=96=B9?= Date: Fri, 8 Dec 2023 14:22:40 +0800 Subject: [PATCH 4/4] fix: import the `expectType` tool type --- packages/dts-test/h.test-d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dts-test/h.test-d.ts b/packages/dts-test/h.test-d.ts index c8c09ec83ab..2392c5850f1 100644 --- a/packages/dts-test/h.test-d.ts +++ b/packages/dts-test/h.test-d.ts @@ -9,7 +9,7 @@ import { Component, resolveComponent } from 'vue' -import { describe, expectAssignable } from './utils' +import { describe, expectAssignable, expectType } from './utils' describe('h inference w/ element', () => { // key