@@ -226,18 +226,8 @@ namespace ts.codefix {
226226 const scriptTarget = getEmitScriptTarget ( context . program . getCompilerOptions ( ) ) ;
227227 const checker = context . program . getTypeChecker ( ) ;
228228 const tracker = getNoopSymbolTrackerWithResolver ( context ) ;
229- const types = map ( args , arg => {
230- const type = checker . getBaseTypeOfLiteralType ( checker . getTypeAtLocation ( arg ) ) ;
231- const typeNode = checker . typeToTypeNode ( type , contextNode , /*flags*/ undefined , tracker ) ;
232- if ( typeNode ?. kind === SyntaxKind . ImportType ) {
233- const importableReference = tryGetAutoImportableReferenceFromImportTypeNode ( typeNode , type , scriptTarget ) ;
234- if ( importableReference ) {
235- importSymbols ( importAdder , importableReference . symbols ) ;
236- return importableReference . typeReference ;
237- }
238- }
239- return typeNode ;
240- } ) ;
229+ const types = map ( args , arg =>
230+ typeToAutoImportableTypeNode ( checker , importAdder , checker . getBaseTypeOfLiteralType ( checker . getTypeAtLocation ( arg ) ) , contextNode , scriptTarget , /*flags*/ undefined , tracker ) ) ;
241231 const names = map ( args , arg =>
242232 isIdentifier ( arg ) ? arg . text : isPropertyAccessExpression ( arg ) && isIdentifier ( arg . name ) ? arg . name . text : undefined ) ;
243233 const contextualType = checker . getContextualType ( call ) ;
@@ -255,6 +245,18 @@ namespace ts.codefix {
255245 body ? createStubbedMethodBody ( context . preferences ) : undefined ) ;
256246 }
257247
248+ export function typeToAutoImportableTypeNode ( checker : TypeChecker , importAdder : ImportAdder , type : Type , contextNode : Node , scriptTarget : ScriptTarget , flags ?: NodeBuilderFlags , tracker ?: SymbolTracker ) : TypeNode | undefined {
249+ const typeNode = checker . typeToTypeNode ( type , contextNode , flags , tracker ) ;
250+ if ( typeNode && isImportTypeNode ( typeNode ) ) {
251+ const importableReference = tryGetAutoImportableReferenceFromImportTypeNode ( typeNode , type , scriptTarget ) ;
252+ if ( importableReference ) {
253+ importSymbols ( importAdder , importableReference . symbols ) ;
254+ return importableReference . typeReference ;
255+ }
256+ }
257+ return typeNode ;
258+ }
259+
258260 function createDummyParameters ( argCount : number , names : ( string | undefined ) [ ] | undefined , types : ( TypeNode | undefined ) [ ] | undefined , minArgumentCount : number | undefined , inJs : boolean ) : ParameterDeclaration [ ] {
259261 const parameters : ParameterDeclaration [ ] = [ ] ;
260262 for ( let i = 0 ; i < argCount ; i ++ ) {
@@ -456,7 +458,7 @@ namespace ts.codefix {
456458 return createQualifiedName ( replaceFirstIdentifierOfEntityName ( name . left , newIdentifier ) , name . right ) ;
457459 }
458460
459- function importSymbols ( importAdder : ImportAdder , symbols : readonly Symbol [ ] ) {
461+ export function importSymbols ( importAdder : ImportAdder , symbols : readonly Symbol [ ] ) {
460462 symbols . forEach ( s => importAdder . addImportFromExportedSymbol ( s , /*usageIsTypeOnly*/ true ) ) ;
461463 }
462464}
0 commit comments