@@ -80,10 +80,7 @@ const containedTypeParametersImplementation = (
8080 stringifyKeyPath ( root ) ,
8181 {
8282 keyPath : root ,
83- typeParameters :
84- // TODO: eliminate the type assertion, perhaps by making `makeUnionType` generic
85- // over the member type
86- makeUnionType ( '' , [ type ] ) as UnionOfTypeParameters ,
83+ typeParameters : makeUnionType ( '' , [ type ] ) ,
8784 } ,
8885 ] ,
8986 ] ) ,
@@ -382,18 +379,33 @@ const mergeTypeParametersByKeyPath = (
382379 if ( valueFromB === undefined ) {
383380 result . set ( key , { keyPath, typeParameters } )
384381 } else {
385- // Merge all type(s) at this key path into a union.
382+ // Merge all type(s) at this key path into a (simplified) union.
383+ const supposedTypeParametersAsArray = [
384+ ...simplifyUnionType (
385+ makeUnionType ( typeParameters . name , [
386+ ...typeParameters . members ,
387+ ...valueFromB . typeParameters . members ,
388+ ] ) ,
389+ ) . members . values ( ) ,
390+ ]
391+ if (
392+ ! supposedTypeParametersAsArray . every (
393+ supposedTypeParameter =>
394+ typeof supposedTypeParameter !== 'string' &&
395+ supposedTypeParameter . kind == 'parameter' ,
396+ )
397+ ) {
398+ throw new Error (
399+ 'Union type member was unexpectedly not a type parameter. This is a bug!' ,
400+ )
401+ }
402+
386403 result . set ( key , {
387404 keyPath,
388- typeParameters :
389- // TODO: eliminate the type assertion, perhaps by making `makeUnionType` and
390- // `simplifyUnionType` generic over their member types
391- simplifyUnionType (
392- makeUnionType ( typeParameters . name , [
393- ...typeParameters . members ,
394- ...valueFromB . typeParameters . members ,
395- ] ) ,
396- ) as UnionOfTypeParameters ,
405+ typeParameters : makeUnionType (
406+ typeParameters . name ,
407+ supposedTypeParametersAsArray ,
408+ ) ,
397409 } )
398410 }
399411 }
0 commit comments