@@ -402,6 +402,19 @@ class SyntheticTypeConverter {
402402 switch ( typeRoot . kind ) {
403403 case "intersection" : {
404404 const node = typeRoot . node ;
405+ for ( const ty of node . getTypeNodes ( ) ) {
406+ if ( ty . getType ( ) . isTypeParameter ( ) ) {
407+ // Can't intersect with a type parameter...
408+ return ANY_IR ;
409+ }
410+ if (
411+ Node . isTypeReference ( ty ) &&
412+ Node . isQualifiedName ( ty . getTypeName ( ) )
413+ ) {
414+ // We don't handle QualifiedNames yet
415+ return ANY_IR ;
416+ }
417+ }
405418 const types = node
406419 . getTypeNodes ( )
407420 . map ( ( ty , idx ) => {
@@ -424,6 +437,11 @@ class SyntheticTypeConverter {
424437 return res ;
425438 } )
426439 . filter ( ( x ) : x is ReferenceTypeIR => ! ! x && x . kind === "reference" ) ;
440+ for ( const node of types ) {
441+ if ( ! node . name . endsWith ( "_iface" ) ) {
442+ node . name += "_iface" ;
443+ }
444+ }
427445 const name = this . nameContext . join ( "__" ) + "_iface" ;
428446 this . converter . extraTopLevels . push (
429447 this . converter . interfaceToIR ( name , types , [ ] , [ ] , [ ] , [ ] ) ,
@@ -1453,6 +1471,7 @@ export function convertDecls(
14531471 . getBasesOfDecls ( defs )
14541472 . filter ( ( base ) => base . name !== name ) ;
14551473 const typeParams = converter . getTypeParamsFromDecls ( defs ) ;
1474+ converter . nameContext = [ name ] ;
14561475 const res = converter . interfaceToIR (
14571476 name ,
14581477 baseNames ,
@@ -1461,6 +1480,7 @@ export function convertDecls(
14611480 defs . flatMap ( ( def ) => def . getCallSignatures ( ) ) ,
14621481 typeParams ,
14631482 ) ;
1483+ converter . nameContext = undefined ;
14641484 pushTopLevel ( res ) ;
14651485
14661486 // Clear interface type parameter constraints after processing interface
0 commit comments