@@ -179,6 +179,19 @@ export class HoistableInterfaces {
179
179
node . declarationList . declarations . forEach ( ( declaration ) => {
180
180
if ( ts . isIdentifier ( declaration . name ) ) {
181
181
this . disallowed_values . add ( declaration . name . text ) ;
182
+ } else {
183
+ const walk = ( node : ts . Node ) => {
184
+ if (
185
+ ts . isIdentifier ( node ) &&
186
+ ts . isBindingElement ( node . parent ) &&
187
+ node . parent . name === node
188
+ ) {
189
+ this . disallowed_values . add ( node . text ) ;
190
+ }
191
+ ts . forEachChild ( node , walk ) ;
192
+ } ;
193
+
194
+ walk ( declaration . name ) ;
182
195
}
183
196
} ) ;
184
197
}
@@ -256,7 +269,7 @@ export class HoistableInterfaces {
256
269
}
257
270
258
271
for ( const dep of deps . value_deps ) {
259
- if ( this . disallowed_values . has ( dep ) ) {
272
+ if ( ! this . isAllowedReference ( dep ) ) {
260
273
this . disallowed_types . add ( interface_name ) ;
261
274
can_hoist = false ;
262
275
break ;
@@ -275,7 +288,7 @@ export class HoistableInterfaces {
275
288
...this . props_interface . type_deps ,
276
289
...this . props_interface . value_deps
277
290
] . every ( ( dep ) => {
278
- return ! this . disallowed_types . has ( dep ) && ! this . disallowed_values . has ( dep ) ;
291
+ return ! this . disallowed_types . has ( dep ) && this . isAllowedReference ( dep ) ;
279
292
} ) ;
280
293
281
294
if ( can_hoist ) {
@@ -333,7 +346,16 @@ export class HoistableInterfaces {
333
346
}
334
347
335
348
isAllowedReference ( reference : string ) {
336
- return ! this . disallowed_values . has ( reference ) ;
349
+ return ! (
350
+ this . disallowed_values . has ( reference ) ||
351
+ reference === '$$props' ||
352
+ reference === '$$restProps' ||
353
+ reference === '$$slots' ||
354
+ // could be a $store reference
355
+ ( reference [ 0 ] === '$' &&
356
+ reference [ 1 ] !== '$' &&
357
+ this . disallowed_values . has ( reference . slice ( 1 ) ) )
358
+ ) ;
337
359
}
338
360
339
361
/**
0 commit comments