Skip to content

Commit 516fabb

Browse files
fix(types): propagate type parameter constraints for TypeScript 4.8 (#6351)
* fix(types): propagate type parameter constraints for TypeScript 4.8 * fix: add more constraints --------- Co-authored-by: 三咲智子 Kevin Deng <[email protected]>
1 parent 57afa22 commit 516fabb

File tree

4 files changed

+20
-12
lines changed

4 files changed

+20
-12
lines changed

packages/runtime-core/src/apiCreateApp.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
ComponentPublicInstance
1717
} from './componentPublicInstance'
1818
import { Directive, validateDirectiveName } from './directives'
19-
import { RootRenderFunction } from './renderer'
19+
import { RendererElement, RootRenderFunction } from './renderer'
2020
import { InjectionKey } from './apiInject'
2121
import { warn } from './warning'
2222
import { createVNode, cloneVNode, VNode } from './vnode'
@@ -196,7 +196,7 @@ export type CreateAppFunction<HostElement> = (
196196

197197
let uid = 0
198198

199-
export function createAppAPI<HostElement>(
199+
export function createAppAPI<HostElement extends RendererElement>(
200200
render: RootRenderFunction<HostElement>,
201201
hydrate?: RootHydrateFunction
202202
): CreateAppFunction<HostElement> {

packages/runtime-core/src/directives.ts

+12-4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { ComponentPublicInstance } from './componentPublicInstance'
2121
import { mapCompatDirectiveHook } from './compat/customDirective'
2222
import { pauseTracking, resetTracking } from '@vue/reactivity'
2323
import { traverse } from './apiWatch'
24+
import { RendererElement } from './renderer'
2425

2526
export interface DirectiveBinding<V = any> {
2627
instance: ComponentPublicInstance | null
@@ -31,7 +32,11 @@ export interface DirectiveBinding<V = any> {
3132
dir: ObjectDirective<any, V>
3233
}
3334

34-
export type DirectiveHook<T = any, Prev = VNode<any, T> | null, V = any> = (
35+
export type DirectiveHook<
36+
T extends RendererElement = any,
37+
Prev = VNode<any, T> | null,
38+
V = any
39+
> = (
3540
el: T,
3641
binding: DirectiveBinding<V>,
3742
vnode: VNode<any, T>,
@@ -43,7 +48,7 @@ export type SSRDirectiveHook = (
4348
vnode: VNode
4449
) => Data | undefined
4550

46-
export interface ObjectDirective<T = any, V = any> {
51+
export interface ObjectDirective<T extends RendererElement = any, V = any> {
4752
created?: DirectiveHook<T, null, V>
4853
beforeMount?: DirectiveHook<T, null, V>
4954
mounted?: DirectiveHook<T, null, V>
@@ -55,9 +60,12 @@ export interface ObjectDirective<T = any, V = any> {
5560
deep?: boolean
5661
}
5762

58-
export type FunctionDirective<T = any, V = any> = DirectiveHook<T, any, V>
63+
export type FunctionDirective<
64+
T extends RendererElement = any,
65+
V = any
66+
> = DirectiveHook<T, any, V>
5967

60-
export type Directive<T = any, V = any> =
68+
export type Directive<T extends RendererElement = any, V = any> =
6169
| ObjectDirective<T, V>
6270
| FunctionDirective<T, V>
6371

packages/runtime-core/src/renderer.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ export type RootRenderFunction<HostElement = RendererElement> = (
9090

9191
export interface RendererOptions<
9292
HostNode = RendererNode,
93-
HostElement = RendererElement
93+
HostElement extends RendererElement = RendererElement
9494
> {
9595
patchProp(
9696
el: HostElement,
@@ -145,7 +145,7 @@ export interface RendererElement extends RendererNode {}
145145
// to optimize bundle size.
146146
export interface RendererInternals<
147147
HostNode = RendererNode,
148-
HostElement = RendererElement
148+
HostElement extends RendererElement = RendererElement
149149
> {
150150
p: PatchFn
151151
um: UnmountFn
@@ -295,7 +295,7 @@ export const queuePostRenderEffect = __FEATURE_SUSPENSE__
295295
*/
296296
export function createRenderer<
297297
HostNode = RendererNode,
298-
HostElement = RendererElement
298+
HostElement extends RendererElement = RendererElement
299299
>(options: RendererOptions<HostNode, HostElement>) {
300300
return baseCreateRenderer<HostNode, HostElement>(options)
301301
}
@@ -312,7 +312,7 @@ export function createHydrationRenderer(
312312
// overload 1: no hydration
313313
function baseCreateRenderer<
314314
HostNode = RendererNode,
315-
HostElement = RendererElement
315+
HostElement extends RendererElement = RendererElement
316316
>(options: RendererOptions<HostNode, HostElement>): Renderer<HostElement>
317317

318318
// overload 2: with hydration

packages/runtime-core/src/vnode.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ export type VNodeNormalizedChildren =
133133

134134
export interface VNode<
135135
HostNode = RendererNode,
136-
HostElement = RendererElement,
136+
HostElement extends RendererElement = RendererElement,
137137
ExtraProps = { [key: string]: any }
138138
> {
139139
/**
@@ -613,7 +613,7 @@ export function guardReactiveProps(props: (Data & VNodeProps) | null) {
613613
: props
614614
}
615615

616-
export function cloneVNode<T, U>(
616+
export function cloneVNode<T extends RendererNode, U extends RendererElement>(
617617
vnode: VNode<T, U>,
618618
extraProps?: (Data & VNodeProps) | null,
619619
mergeRef = false

0 commit comments

Comments
 (0)