Skip to content

Commit 1b5e9ef

Browse files
committed
wip: improve types
1 parent 90dc4e2 commit 1b5e9ef

File tree

3 files changed

+35
-30
lines changed

3 files changed

+35
-30
lines changed

packages/runtime-vapor/src/block.ts

+17-20
Original file line numberDiff line numberDiff line change
@@ -19,33 +19,32 @@ import {
1919
applyTransitionLeaveHooks,
2020
} from './components/Transition'
2121

22-
export type Block = (
23-
| Node
24-
| VaporFragment
25-
| DynamicFragment
26-
| VaporComponentInstance
27-
| Block[]
28-
) &
29-
TransitionBlock
22+
export interface TransitionBlock {
23+
key?: any
24+
$transition?: VaporTransitionHooks
25+
}
3026

3127
export interface VaporTransitionHooks extends TransitionHooks {
3228
state: TransitionState
3329
props: TransitionProps
3430
}
3531

36-
export type TransitionBlock = {
37-
key?: any
38-
$transition?: VaporTransitionHooks
39-
}
32+
export type Block =
33+
| (Node & TransitionBlock)
34+
| (VaporFragment & TransitionBlock)
35+
| (DynamicFragment & TransitionBlock)
36+
| VaporComponentInstance
37+
| Block[]
4038

4139
export type BlockFn = (...args: any[]) => Block
4240

43-
export class VaporFragment {
41+
export class VaporFragment implements TransitionBlock {
42+
key?: any
43+
$transition?: VaporTransitionHooks | undefined
4444
nodes: Block
4545
anchor?: Node
4646
insert?: (parent: ParentNode, anchor: Node | null) => void
4747
remove?: (parent?: ParentNode) => void
48-
$transition?: VaporTransitionHooks | undefined
4948

5049
constructor(nodes: Block) {
5150
this.nodes = nodes
@@ -153,11 +152,10 @@ export function insert(
153152
anchor = anchor === 0 ? parent.firstChild : anchor
154153
if (block instanceof Node) {
155154
// don't apply transition on text or comment nodes
156-
if (block.$transition && block instanceof Element) {
155+
if ((block as TransitionBlock).$transition && block instanceof Element) {
157156
performTransitionEnter(
158157
block,
159-
// @ts-expect-error
160-
block.$transition,
158+
(block as TransitionBlock).$transition as TransitionHooks,
161159
() => parent.insertBefore(block, anchor),
162160
parentSuspense,
163161
)
@@ -188,11 +186,10 @@ export function prepend(parent: ParentNode, ...blocks: Block[]): void {
188186

189187
export function remove(block: Block, parent?: ParentNode): void {
190188
if (block instanceof Node) {
191-
if (block.$transition && block instanceof Element) {
189+
if ((block as TransitionBlock).$transition && block instanceof Element) {
192190
performTransitionLeave(
193191
block,
194-
// @ts-expect-error
195-
block.$transition,
192+
(block as TransitionBlock).$transition as TransitionHooks,
196193
() => parent && parent.removeChild(block),
197194
)
198195
} else {

packages/runtime-vapor/src/components/Transition.ts

+16-8
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ import {
1313
useTransitionState,
1414
warn,
1515
} from '@vue/runtime-dom'
16-
import { type Block, type VaporTransitionHooks, isFragment } from '../block'
16+
import {
17+
type Block,
18+
type TransitionBlock,
19+
type VaporTransitionHooks,
20+
isFragment,
21+
} from '../block'
1722
import { isVaporComponent } from '../component'
1823

1924
export const vaporTransitionImpl: VaporTransitionInterface = {
@@ -85,7 +90,7 @@ const getTransitionHooksContext = (
8590
}
8691

8792
function resolveTransitionHooks(
88-
block: Block,
93+
block: TransitionBlock,
8994
props: TransitionProps,
9095
state: TransitionState,
9196
instance: GenericComponentInstance,
@@ -109,7 +114,10 @@ function resolveTransitionHooks(
109114
return hooks
110115
}
111116

112-
function setTransitionHooks(block: Block, hooks: VaporTransitionHooks) {
117+
function setTransitionHooks(
118+
block: TransitionBlock,
119+
hooks: VaporTransitionHooks,
120+
) {
113121
if (!isFragment(block)) {
114122
block.$transition = hooks
115123
}
@@ -188,20 +196,20 @@ export function applyTransitionLeaveHooks(
188196
}
189197
}
190198

191-
const transitionChildCache = new WeakMap<Block, Block>()
192-
export function findElementChild(block: Block): Block | undefined {
199+
const transitionChildCache = new WeakMap<Block, TransitionBlock>()
200+
export function findElementChild(block: Block): TransitionBlock | undefined {
193201
if (transitionChildCache.has(block)) {
194202
return transitionChildCache.get(block)
195203
}
196204

197-
let child: Block | undefined
205+
let child: TransitionBlock | undefined
198206
if (block instanceof Node) {
199207
// transition can only be applied on Element child
200-
if (block instanceof Element) child = block
208+
if (block instanceof Element) child = block as TransitionBlock
201209
} else if (isVaporComponent(block)) {
202210
child = findElementChild(block.block)
203211
} else if (Array.isArray(block)) {
204-
child = block[0]
212+
child = block[0] as TransitionBlock
205213
let hasFound = false
206214
for (const c of block) {
207215
const item = findElementChild(c)

packages/runtime-vapor/src/directives/vShow.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
} from '@vue/runtime-dom'
77
import { renderEffect } from '../renderEffect'
88
import { isVaporComponent } from '../component'
9-
import { type Block, DynamicFragment } from '../block'
9+
import { type Block, DynamicFragment, type TransitionBlock } from '../block'
1010
import { isArray } from '@vue/shared'
1111

1212
export function applyVShow(target: Block, source: () => any): void {
@@ -39,7 +39,7 @@ function setDisplay(target: Block, value: unknown): void {
3939
if (target instanceof DynamicFragment) {
4040
return setDisplay(target.nodes, value)
4141
}
42-
const { $transition } = target
42+
const { $transition } = target as TransitionBlock
4343
if (target instanceof Element) {
4444
const el = target as VShowElement
4545
if (!(vShowOriginalDisplay in el)) {

0 commit comments

Comments
 (0)