From 0854a93040b1cff92ad161ee64a7a70227286f00 Mon Sep 17 00:00:00 2001 From: TypeScript Bot Date: Wed, 12 Jan 2022 11:26:13 -0800 Subject: [PATCH] Cherry-pick PR #47136 into release-4.5 (#47379) Component commits: e61702c7df Fix extract type crash Co-authored-by: Andrew Branch --- src/services/refactors/extractType.ts | 4 ++-- tests/cases/fourslash/extractTypeUnresolvedAlias.ts | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 tests/cases/fourslash/extractTypeUnresolvedAlias.ts 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