diff --git a/src/services/refactors/extractType.ts b/src/services/refactors/extractType.ts index 549ff99f4d7ac..83d72d41594ee 100644 --- a/src/services/refactors/extractType.ts +++ b/src/services/refactors/extractType.ts @@ -145,8 +145,8 @@ namespace ts.refactor { if (isTypeReferenceNode(node)) { if (isIdentifier(node.typeName)) { const symbol = checker.resolveName(node.typeName.text, node.typeName, SymbolFlags.TypeParameter, /* excludeGlobals */ true); - if (symbol?.declarations) { - const declaration = cast(first(symbol.declarations), isTypeParameterDeclaration); + const declaration = tryCast(symbol?.declarations?.[0], isTypeParameterDeclaration); + if (declaration) { if (rangeContainsSkipTrivia(statement, declaration, file) && !rangeContainsSkipTrivia(selection, declaration, file)) { pushIfUnique(result, declaration); } diff --git a/tests/cases/fourslash/extractTypeUnresolvedAlias.ts b/tests/cases/fourslash/extractTypeUnresolvedAlias.ts new file mode 100644 index 0000000000000..5ee00f891993e --- /dev/null +++ b/tests/cases/fourslash/extractTypeUnresolvedAlias.ts @@ -0,0 +1,10 @@ +/// + +//// import {Renderer} from ''; +//// +//// export class X { +//// constructor(renderer: /**/[|Renderer|]) {} +//// } + +goTo.selectRange(test.ranges()[0]); +verify.refactorAvailable("Extract type", "Extract to type alias"); \ No newline at end of file