Annotate fewer extracted constants with types

Expose `isContextSensitive` from the checker and omit type annotations
for expressions for which it returns false.
This commit is contained in:
Andrew Casey 2017-12-15 15:01:10 -08:00
parent e9ac87c2d6
commit 9efab94dfd
4 changed files with 7 additions and 4 deletions

View File

@ -171,6 +171,7 @@ namespace ts {
node = getParseTreeNode(node, isExpression);
return node ? getContextualType(node) : undefined;
},
isContextSensitive,
getFullyQualifiedName,
getResolvedSignature: (node, candidatesOutArray, theArgumentCount) => {
node = getParseTreeNode(node, isCallLikeExpression);

View File

@ -2739,6 +2739,8 @@ namespace ts {
getAugmentedPropertiesOfType(type: Type): Symbol[];
getRootSymbols(symbol: Symbol): Symbol[];
getContextualType(node: Expression): Type | undefined;
/* @internal */ isContextSensitive(node: Expression | MethodDeclaration | ObjectLiteralElementLike | JsxAttributeLike): boolean;
/**
* returns unknownSignature in the case of an error.
* @param argumentCount Apparent number of arguments, passed in case of a possibly incomplete call. This should come from an ArgumentListInfo. See `signatureHelp.ts`.

View File

@ -1004,7 +1004,7 @@ namespace ts.refactor.extractSymbol {
const localNameText = getUniqueName(isClassLike(scope) ? "newProperty" : "newLocal", file.text);
const isJS = isInJavaScriptFile(scope);
const variableType = isJS
const variableType = isJS || !checker.isContextSensitive(node)
? undefined
: checker.typeToTypeNode(checker.getContextualType(node), scope, NodeBuilderFlags.NoTruncation);

View File

@ -15,7 +15,7 @@ const i = 0;
class C {
M() {
for (let j = 0; j < 10; j++) {
const newLocal: any = i + 1;
const newLocal = i + 1;
x = /*RENAME*/newLocal;
}
}
@ -25,7 +25,7 @@ class C {
const i = 0;
class C {
private readonly newProperty: any = i + 1;
private readonly newProperty = i + 1;
M() {
for (let j = 0; j < 10; j++) {
@ -37,7 +37,7 @@ class C {
// ==SCOPE::Extract to constant in global scope==
const i = 0;
const newLocal: any = i + 1;
const newLocal = i + 1;
class C {
M() {
for (let j = 0; j < 10; j++) {