@@ -4,9 +4,27 @@ import { ComponentOptions as Vue2ComponentOptions } from './options'
4
4
import { EmitsOptions , SetupContext } from './v3-setup-context'
5
5
import { Data } from './common'
6
6
import { ComponentPropsOptions , ExtractPropTypes } from './v3-component-props'
7
- import { ComponentRenderProxy } from './v3-component-proxy '
7
+ import { CreateComponentPublicInstance } from './v3-component-public-instance '
8
8
export { ComponentPropsOptions } from './v3-component-props'
9
9
10
+ /**
11
+ * Interface for declaring custom options.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * declare module 'vue' {
16
+ * interface ComponentCustomOptions {
17
+ * beforeRouteUpdate?(
18
+ * to: Route,
19
+ * from: Route,
20
+ * next: () => void
21
+ * ): void
22
+ * }
23
+ * }
24
+ * ```
25
+ */
26
+ export interface ComponentCustomOptions { }
27
+
10
28
export type ComputedGetter < T > = ( ctx ?: any ) => T
11
29
export type ComputedSetter < T > = ( v : T ) => void
12
30
@@ -34,24 +52,47 @@ export type SetupFunction<
34
52
ctx : SetupContext < Emits >
35
53
) => RawBindings | ( ( ) => VNode | null ) | void
36
54
37
- interface ComponentOptionsBase <
55
+ export interface ComponentOptionsBase <
38
56
Props ,
39
- D = Data ,
40
- C extends ComputedOptions = { } ,
41
- M extends MethodOptions = { }
57
+ RawBindings ,
58
+ D ,
59
+ C extends ComputedOptions ,
60
+ M extends MethodOptions ,
61
+ Mixin extends ComponentOptionsMixin ,
62
+ Extends extends ComponentOptionsMixin ,
63
+ Emits extends EmitsOptions ,
64
+ EmitNames extends string = string
42
65
> extends Omit <
43
- Vue2ComponentOptions < Vue , D , M , C , Props > ,
44
- 'data' | 'computed' | 'method' | 'setup' | 'props'
45
- > {
66
+ Vue2ComponentOptions < Vue , D , M , C , Props > ,
67
+ 'data' | 'computed' | 'method' | 'setup' | 'props' | 'mixins' | 'extends'
68
+ > ,
69
+ ComponentCustomOptions {
46
70
// allow any custom options
47
71
[ key : string ] : any
48
72
49
73
// rewrite options api types
50
- data ?: ( this : Props & Vue , vm : Props ) => D
74
+ data ?: (
75
+ this : CreateComponentPublicInstance < Props , { } , { } , { } , M , Mixin , Extends > ,
76
+ vm : CreateComponentPublicInstance < Props , { } , { } , { } , M , Mixin , Extends >
77
+ ) => D
51
78
computed ?: C
52
- methods ?: M
79
+ mixins ?: Mixin [ ]
80
+ extends ?: Extends
81
+ emits ?: ( Emits | EmitNames [ ] ) & ThisType < void >
82
+ setup ?: SetupFunction < Props , RawBindings , Emits >
53
83
}
54
84
85
+ export type ComponentOptionsMixin = ComponentOptionsBase <
86
+ any ,
87
+ any ,
88
+ any ,
89
+ any ,
90
+ any ,
91
+ any ,
92
+ any ,
93
+ any
94
+ >
95
+
55
96
export type ExtractComputedReturns < T extends any > = {
56
97
[ key in keyof T ] : T [ key ] extends { get : ( ...args : any [ ] ) => infer TReturn }
57
98
? TReturn
@@ -66,17 +107,34 @@ export type ComponentOptionsWithProps<
66
107
D = Data ,
67
108
C extends ComputedOptions = { } ,
68
109
M extends MethodOptions = { } ,
69
- Mixin = { } ,
70
- Extends = { } ,
110
+ Mixin extends ComponentOptionsMixin = ComponentOptionsMixin ,
111
+ Extends extends ComponentOptionsMixin = ComponentOptionsMixin ,
71
112
Emits extends EmitsOptions = { } ,
72
113
EmitsNames extends string = string ,
73
114
Props = ExtractPropTypes < PropsOptions >
74
- > = ComponentOptionsBase < Props , D , C , M > & {
115
+ > = ComponentOptionsBase <
116
+ Props ,
117
+ RawBindings ,
118
+ D ,
119
+ C ,
120
+ M ,
121
+ Mixin ,
122
+ Extends ,
123
+ Emits ,
124
+ EmitsNames
125
+ > & {
75
126
props ?: PropsOptions
76
- emits ?: ( Emits | EmitsNames [ ] ) & ThisType < void >
77
- setup ?: SetupFunction < Props , RawBindings , Emits >
78
127
} & ThisType <
79
- ComponentRenderProxy < Props , RawBindings , D , C , M , Mixin , Extends , Emits >
128
+ CreateComponentPublicInstance <
129
+ Props ,
130
+ RawBindings ,
131
+ D ,
132
+ C ,
133
+ M ,
134
+ Mixin ,
135
+ Extends ,
136
+ Emits
137
+ >
80
138
>
81
139
82
140
export type ComponentOptionsWithArrayProps <
@@ -85,17 +143,34 @@ export type ComponentOptionsWithArrayProps<
85
143
D = Data ,
86
144
C extends ComputedOptions = { } ,
87
145
M extends MethodOptions = { } ,
88
- Mixin = { } ,
89
- Extends = { } ,
146
+ Mixin extends ComponentOptionsMixin = ComponentOptionsMixin ,
147
+ Extends extends ComponentOptionsMixin = ComponentOptionsMixin ,
90
148
Emits extends EmitsOptions = { } ,
91
149
EmitsNames extends string = string ,
92
150
Props = Readonly < { [ key in PropNames ] ?: any } >
93
- > = ComponentOptionsBase < Props , D , C , M > & {
151
+ > = ComponentOptionsBase <
152
+ Props ,
153
+ RawBindings ,
154
+ D ,
155
+ C ,
156
+ M ,
157
+ Mixin ,
158
+ Extends ,
159
+ Emits ,
160
+ EmitsNames
161
+ > & {
94
162
props ?: PropNames [ ]
95
- emits ?: ( Emits | EmitsNames [ ] ) & ThisType < void >
96
- setup ?: SetupFunction < Props , RawBindings , Emits >
97
163
} & ThisType <
98
- ComponentRenderProxy < Props , RawBindings , D , C , M , Mixin , Extends , Emits >
164
+ CreateComponentPublicInstance <
165
+ Props ,
166
+ RawBindings ,
167
+ D ,
168
+ C ,
169
+ M ,
170
+ Mixin ,
171
+ Extends ,
172
+ Emits
173
+ >
99
174
>
100
175
101
176
export type ComponentOptionsWithoutProps <
@@ -104,16 +179,33 @@ export type ComponentOptionsWithoutProps<
104
179
D = Data ,
105
180
C extends ComputedOptions = { } ,
106
181
M extends MethodOptions = { } ,
107
- Mixin = { } ,
108
- Extends = { } ,
182
+ Mixin extends ComponentOptionsMixin = ComponentOptionsMixin ,
183
+ Extends extends ComponentOptionsMixin = ComponentOptionsMixin ,
109
184
Emits extends EmitsOptions = { } ,
110
185
EmitsNames extends string = string
111
- > = ComponentOptionsBase < Props , D , C , M > & {
186
+ > = ComponentOptionsBase <
187
+ Props ,
188
+ RawBindings ,
189
+ D ,
190
+ C ,
191
+ M ,
192
+ Mixin ,
193
+ Extends ,
194
+ Emits ,
195
+ EmitsNames
196
+ > & {
112
197
props ?: undefined
113
- emits ?: ( Emits | EmitsNames [ ] ) & ThisType < void >
114
- setup ?: SetupFunction < Props , RawBindings , Emits >
115
198
} & ThisType <
116
- ComponentRenderProxy < Props , RawBindings , D , C , M , Mixin , Extends , Emits >
199
+ CreateComponentPublicInstance <
200
+ Props ,
201
+ RawBindings ,
202
+ D ,
203
+ C ,
204
+ M ,
205
+ Mixin ,
206
+ Extends ,
207
+ Emits
208
+ >
117
209
>
118
210
119
211
export type WithLegacyAPI < T , D , C , M , Props > = T &
0 commit comments