mirror of https://github.com/vuejs/core.git
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 <sxzz@sxzz.moe>
This commit is contained in:
parent
57afa2236b
commit
516fabb725
|
@ -16,7 +16,7 @@ import {
|
||||||
ComponentPublicInstance
|
ComponentPublicInstance
|
||||||
} from './componentPublicInstance'
|
} from './componentPublicInstance'
|
||||||
import { Directive, validateDirectiveName } from './directives'
|
import { Directive, validateDirectiveName } from './directives'
|
||||||
import { RootRenderFunction } from './renderer'
|
import { RendererElement, RootRenderFunction } from './renderer'
|
||||||
import { InjectionKey } from './apiInject'
|
import { InjectionKey } from './apiInject'
|
||||||
import { warn } from './warning'
|
import { warn } from './warning'
|
||||||
import { createVNode, cloneVNode, VNode } from './vnode'
|
import { createVNode, cloneVNode, VNode } from './vnode'
|
||||||
|
@ -196,7 +196,7 @@ export type CreateAppFunction<HostElement> = (
|
||||||
|
|
||||||
let uid = 0
|
let uid = 0
|
||||||
|
|
||||||
export function createAppAPI<HostElement>(
|
export function createAppAPI<HostElement extends RendererElement>(
|
||||||
render: RootRenderFunction<HostElement>,
|
render: RootRenderFunction<HostElement>,
|
||||||
hydrate?: RootHydrateFunction
|
hydrate?: RootHydrateFunction
|
||||||
): CreateAppFunction<HostElement> {
|
): CreateAppFunction<HostElement> {
|
||||||
|
|
|
@ -21,6 +21,7 @@ import { ComponentPublicInstance } from './componentPublicInstance'
|
||||||
import { mapCompatDirectiveHook } from './compat/customDirective'
|
import { mapCompatDirectiveHook } from './compat/customDirective'
|
||||||
import { pauseTracking, resetTracking } from '@vue/reactivity'
|
import { pauseTracking, resetTracking } from '@vue/reactivity'
|
||||||
import { traverse } from './apiWatch'
|
import { traverse } from './apiWatch'
|
||||||
|
import { RendererElement } from './renderer'
|
||||||
|
|
||||||
export interface DirectiveBinding<V = any> {
|
export interface DirectiveBinding<V = any> {
|
||||||
instance: ComponentPublicInstance | null
|
instance: ComponentPublicInstance | null
|
||||||
|
@ -31,7 +32,11 @@ export interface DirectiveBinding<V = any> {
|
||||||
dir: ObjectDirective<any, V>
|
dir: ObjectDirective<any, V>
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DirectiveHook<T = any, Prev = VNode<any, T> | null, V = any> = (
|
export type DirectiveHook<
|
||||||
|
T extends RendererElement = any,
|
||||||
|
Prev = VNode<any, T> | null,
|
||||||
|
V = any
|
||||||
|
> = (
|
||||||
el: T,
|
el: T,
|
||||||
binding: DirectiveBinding<V>,
|
binding: DirectiveBinding<V>,
|
||||||
vnode: VNode<any, T>,
|
vnode: VNode<any, T>,
|
||||||
|
@ -43,7 +48,7 @@ export type SSRDirectiveHook = (
|
||||||
vnode: VNode
|
vnode: VNode
|
||||||
) => Data | undefined
|
) => Data | undefined
|
||||||
|
|
||||||
export interface ObjectDirective<T = any, V = any> {
|
export interface ObjectDirective<T extends RendererElement = any, V = any> {
|
||||||
created?: DirectiveHook<T, null, V>
|
created?: DirectiveHook<T, null, V>
|
||||||
beforeMount?: DirectiveHook<T, null, V>
|
beforeMount?: DirectiveHook<T, null, V>
|
||||||
mounted?: DirectiveHook<T, null, V>
|
mounted?: DirectiveHook<T, null, V>
|
||||||
|
@ -55,9 +60,12 @@ export interface ObjectDirective<T = any, V = any> {
|
||||||
deep?: boolean
|
deep?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export type FunctionDirective<T = any, V = any> = DirectiveHook<T, any, V>
|
export type FunctionDirective<
|
||||||
|
T extends RendererElement = any,
|
||||||
|
V = any
|
||||||
|
> = DirectiveHook<T, any, V>
|
||||||
|
|
||||||
export type Directive<T = any, V = any> =
|
export type Directive<T extends RendererElement = any, V = any> =
|
||||||
| ObjectDirective<T, V>
|
| ObjectDirective<T, V>
|
||||||
| FunctionDirective<T, V>
|
| FunctionDirective<T, V>
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ export type RootRenderFunction<HostElement = RendererElement> = (
|
||||||
|
|
||||||
export interface RendererOptions<
|
export interface RendererOptions<
|
||||||
HostNode = RendererNode,
|
HostNode = RendererNode,
|
||||||
HostElement = RendererElement
|
HostElement extends RendererElement = RendererElement
|
||||||
> {
|
> {
|
||||||
patchProp(
|
patchProp(
|
||||||
el: HostElement,
|
el: HostElement,
|
||||||
|
@ -145,7 +145,7 @@ export interface RendererElement extends RendererNode {}
|
||||||
// to optimize bundle size.
|
// to optimize bundle size.
|
||||||
export interface RendererInternals<
|
export interface RendererInternals<
|
||||||
HostNode = RendererNode,
|
HostNode = RendererNode,
|
||||||
HostElement = RendererElement
|
HostElement extends RendererElement = RendererElement
|
||||||
> {
|
> {
|
||||||
p: PatchFn
|
p: PatchFn
|
||||||
um: UnmountFn
|
um: UnmountFn
|
||||||
|
@ -295,7 +295,7 @@ export const queuePostRenderEffect = __FEATURE_SUSPENSE__
|
||||||
*/
|
*/
|
||||||
export function createRenderer<
|
export function createRenderer<
|
||||||
HostNode = RendererNode,
|
HostNode = RendererNode,
|
||||||
HostElement = RendererElement
|
HostElement extends RendererElement = RendererElement
|
||||||
>(options: RendererOptions<HostNode, HostElement>) {
|
>(options: RendererOptions<HostNode, HostElement>) {
|
||||||
return baseCreateRenderer<HostNode, HostElement>(options)
|
return baseCreateRenderer<HostNode, HostElement>(options)
|
||||||
}
|
}
|
||||||
|
@ -312,7 +312,7 @@ export function createHydrationRenderer(
|
||||||
// overload 1: no hydration
|
// overload 1: no hydration
|
||||||
function baseCreateRenderer<
|
function baseCreateRenderer<
|
||||||
HostNode = RendererNode,
|
HostNode = RendererNode,
|
||||||
HostElement = RendererElement
|
HostElement extends RendererElement = RendererElement
|
||||||
>(options: RendererOptions<HostNode, HostElement>): Renderer<HostElement>
|
>(options: RendererOptions<HostNode, HostElement>): Renderer<HostElement>
|
||||||
|
|
||||||
// overload 2: with hydration
|
// overload 2: with hydration
|
||||||
|
|
|
@ -133,7 +133,7 @@ export type VNodeNormalizedChildren =
|
||||||
|
|
||||||
export interface VNode<
|
export interface VNode<
|
||||||
HostNode = RendererNode,
|
HostNode = RendererNode,
|
||||||
HostElement = RendererElement,
|
HostElement extends RendererElement = RendererElement,
|
||||||
ExtraProps = { [key: string]: any }
|
ExtraProps = { [key: string]: any }
|
||||||
> {
|
> {
|
||||||
/**
|
/**
|
||||||
|
@ -613,7 +613,7 @@ export function guardReactiveProps(props: (Data & VNodeProps) | null) {
|
||||||
: props
|
: props
|
||||||
}
|
}
|
||||||
|
|
||||||
export function cloneVNode<T, U>(
|
export function cloneVNode<T extends RendererNode, U extends RendererElement>(
|
||||||
vnode: VNode<T, U>,
|
vnode: VNode<T, U>,
|
||||||
extraProps?: (Data & VNodeProps) | null,
|
extraProps?: (Data & VNodeProps) | null,
|
||||||
mergeRef = false
|
mergeRef = false
|
||||||
|
|
Loading…
Reference in New Issue