1
1
import {
2
- PublicAPIComponent ,
3
2
Component ,
3
+ ConcreteComponent ,
4
4
currentInstance ,
5
5
ComponentInternalInstance ,
6
6
isInSSRComponentSetup
7
7
} from './component'
8
8
import { isFunction , isObject } from '@vue/shared'
9
- import { ComponentPublicInstance } from './componentProxy '
9
+ import { ComponentPublicInstance } from './componentPublicInstance '
10
10
import { createVNode } from './vnode'
11
11
import { defineComponent } from './apiDefineComponent'
12
12
import { warn } from './warning'
13
13
import { ref } from '@vue/reactivity'
14
14
import { handleError , ErrorCodes } from './errorHandling'
15
15
16
- export type AsyncComponentResolveResult < T = PublicAPIComponent > =
17
- | T
18
- | { default : T } // es modules
16
+ export type AsyncComponentResolveResult < T = Component > = T | { default : T } // es modules
19
17
20
18
export type AsyncComponentLoader < T = any > = ( ) => Promise <
21
19
AsyncComponentResolveResult < T >
22
20
>
23
21
24
22
export interface AsyncComponentOptions < T = any > {
25
23
loader : AsyncComponentLoader < T >
26
- loadingComponent ?: PublicAPIComponent
27
- errorComponent ?: PublicAPIComponent
24
+ loadingComponent ?: Component
25
+ errorComponent ?: Component
28
26
delay ?: number
29
27
timeout ?: number
30
28
suspensible ?: boolean
@@ -37,7 +35,7 @@ export interface AsyncComponentOptions<T = any> {
37
35
}
38
36
39
37
export function defineAsyncComponent <
40
- T extends PublicAPIComponent = { new ( ) : ComponentPublicInstance }
38
+ T extends Component = { new ( ) : ComponentPublicInstance }
41
39
> ( source : AsyncComponentLoader < T > | AsyncComponentOptions < T > ) : T {
42
40
if ( isFunction ( source ) ) {
43
41
source = { loader : source }
@@ -53,8 +51,8 @@ export function defineAsyncComponent<
53
51
onError : userOnError
54
52
} = source
55
53
56
- let pendingRequest : Promise < Component > | null = null
57
- let resolvedComp : Component | undefined
54
+ let pendingRequest : Promise < ConcreteComponent > | null = null
55
+ let resolvedComp : ConcreteComponent | undefined
58
56
59
57
let retries = 0
60
58
const retry = ( ) => {
@@ -63,8 +61,8 @@ export function defineAsyncComponent<
63
61
return load ( )
64
62
}
65
63
66
- const load = ( ) : Promise < Component > => {
67
- let thisRequest : Promise < Component >
64
+ const load = ( ) : Promise < ConcreteComponent > => {
65
+ let thisRequest : Promise < ConcreteComponent >
68
66
return (
69
67
pendingRequest ||
70
68
( thisRequest = pendingRequest = loader ( )
@@ -135,7 +133,9 @@ export function defineAsyncComponent<
135
133
onError ( err )
136
134
return ( ) =>
137
135
errorComponent
138
- ? createVNode ( errorComponent as Component , { error : err } )
136
+ ? createVNode ( errorComponent as ConcreteComponent , {
137
+ error : err
138
+ } )
139
139
: null
140
140
} )
141
141
}
@@ -175,19 +175,19 @@ export function defineAsyncComponent<
175
175
if ( loaded . value && resolvedComp ) {
176
176
return createInnerComp ( resolvedComp , instance )
177
177
} else if ( error . value && errorComponent ) {
178
- return createVNode ( errorComponent as Component , {
178
+ return createVNode ( errorComponent as ConcreteComponent , {
179
179
error : error . value
180
180
} )
181
181
} else if ( loadingComponent && ! delayed . value ) {
182
- return createVNode ( loadingComponent as Component )
182
+ return createVNode ( loadingComponent as ConcreteComponent )
183
183
}
184
184
}
185
185
}
186
186
} ) as any
187
187
}
188
188
189
189
function createInnerComp (
190
- comp : Component ,
190
+ comp : ConcreteComponent ,
191
191
{ vnode : { props, children } } : ComponentInternalInstance
192
192
) {
193
193
return createVNode ( comp , props , children )
0 commit comments