diff --git a/src/services/utilities.ts b/src/services/utilities.ts index cba0669f43d..16c54b756bd 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -802,6 +802,11 @@ namespace ts { return contextualType; } + const parent = node.parent; + if (parent && isBinaryExpression(parent) && isEqualityOperatorKind(parent.operatorToken.kind)) { + return checker.getTypeAtLocation(node === parent.left ? parent.right : parent.left); + } + const ancestorTypeNode = getAncestorTypeNode(node); return ancestorTypeNode && checker.getTypeAtLocation(ancestorTypeNode); } diff --git a/tests/cases/fourslash/renameStringLiteralOk1.ts b/tests/cases/fourslash/renameStringLiteralOk1.ts index a6b0047d72d..9d3cf55af72 100644 --- a/tests/cases/fourslash/renameStringLiteralOk1.ts +++ b/tests/cases/fourslash/renameStringLiteralOk1.ts @@ -9,10 +9,3 @@ //// ff.f = '[|foo|]' verify.rangesWithSameTextAreRenameLocations("foo"); - -interface Foo { - f: 'foo' | 'bar' -} -const d: 'foo' = 'foo' -declare const f: Foo -f.f = 'foo' \ No newline at end of file diff --git a/tests/cases/fourslash/renameStringLiteralTypes.ts b/tests/cases/fourslash/renameStringLiteralTypes1.ts similarity index 100% rename from tests/cases/fourslash/renameStringLiteralTypes.ts rename to tests/cases/fourslash/renameStringLiteralTypes1.ts diff --git a/tests/cases/fourslash/renameStringLiteralTypes2.ts b/tests/cases/fourslash/renameStringLiteralTypes2.ts new file mode 100644 index 00000000000..9613d538d91 --- /dev/null +++ b/tests/cases/fourslash/renameStringLiteralTypes2.ts @@ -0,0 +1,22 @@ +/// + +////type Foo = "[|a|]" | "b"; +//// +////class C { +//// p: Foo = "[|a|]"; +//// m() { +//// if (this.p === "[|a|]") {} +//// if ("[|a|]" === this.p) {} +//// +//// if (this.p !== "[|a|]") {} +//// if ("[|a|]" !== this.p) {} +//// +//// if (this.p == "[|a|]") {} +//// if ("[|a|]" == this.p) {} +//// +//// if (this.p != "[|a|]") {} +//// if ("[|a|]" != this.p) {} +//// } +////} + +verify.rangesWithSameTextAreRenameLocations("a");