mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-10 15:25:54 -06:00
Accept baseline changes and complete fix for type assertion assignment issue
Co-authored-by: jakebailey <5341706+jakebailey@users.noreply.github.com>
This commit is contained in:
parent
1c4291ed96
commit
931430c335
@ -4780,51 +4780,51 @@ type AssignmentTarget =
|
||||
| PostfixUnaryExpression
|
||||
| ForInOrOfStatement;
|
||||
|
||||
function getAssignmentTarget(node: Node): AssignmentTarget | undefined {
|
||||
let parent = node.parent;
|
||||
while (true) {
|
||||
switch (parent.kind) {
|
||||
case SyntaxKind.BinaryExpression:
|
||||
const binaryExpression = parent as BinaryExpression;
|
||||
const binaryOperator = binaryExpression.operatorToken.kind;
|
||||
return isAssignmentOperator(binaryOperator) && binaryExpression.left === node ? binaryExpression : undefined;
|
||||
case SyntaxKind.PrefixUnaryExpression:
|
||||
case SyntaxKind.PostfixUnaryExpression:
|
||||
const unaryExpression = parent as PrefixUnaryExpression | PostfixUnaryExpression;
|
||||
const unaryOperator = unaryExpression.operator;
|
||||
return unaryOperator === SyntaxKind.PlusPlusToken || unaryOperator === SyntaxKind.MinusMinusToken ? unaryExpression : undefined;
|
||||
case SyntaxKind.ForInStatement:
|
||||
case SyntaxKind.ForOfStatement:
|
||||
const forInOrOfStatement = parent as ForInOrOfStatement;
|
||||
return forInOrOfStatement.initializer === node ? forInOrOfStatement : undefined;
|
||||
case SyntaxKind.ParenthesizedExpression:
|
||||
case SyntaxKind.ArrayLiteralExpression:
|
||||
case SyntaxKind.SpreadElement:
|
||||
case SyntaxKind.NonNullExpression:
|
||||
case SyntaxKind.TypeAssertionExpression:
|
||||
case SyntaxKind.AsExpression:
|
||||
node = parent;
|
||||
break;
|
||||
case SyntaxKind.SpreadAssignment:
|
||||
node = parent.parent;
|
||||
break;
|
||||
case SyntaxKind.ShorthandPropertyAssignment:
|
||||
if ((parent as ShorthandPropertyAssignment).name !== node) {
|
||||
return undefined;
|
||||
}
|
||||
node = parent.parent;
|
||||
break;
|
||||
case SyntaxKind.PropertyAssignment:
|
||||
if ((parent as PropertyAssignment).name === node) {
|
||||
return undefined;
|
||||
}
|
||||
node = parent.parent;
|
||||
break;
|
||||
default:
|
||||
return undefined;
|
||||
}
|
||||
parent = node.parent;
|
||||
}
|
||||
function getAssignmentTarget(node: Node): AssignmentTarget | undefined {
|
||||
let parent = node.parent;
|
||||
while (true) {
|
||||
switch (parent.kind) {
|
||||
case SyntaxKind.BinaryExpression:
|
||||
const binaryExpression = parent as BinaryExpression;
|
||||
const binaryOperator = binaryExpression.operatorToken.kind;
|
||||
return isAssignmentOperator(binaryOperator) && binaryExpression.left === node ? binaryExpression : undefined;
|
||||
case SyntaxKind.PrefixUnaryExpression:
|
||||
case SyntaxKind.PostfixUnaryExpression:
|
||||
const unaryExpression = parent as PrefixUnaryExpression | PostfixUnaryExpression;
|
||||
const unaryOperator = unaryExpression.operator;
|
||||
return unaryOperator === SyntaxKind.PlusPlusToken || unaryOperator === SyntaxKind.MinusMinusToken ? unaryExpression : undefined;
|
||||
case SyntaxKind.ForInStatement:
|
||||
case SyntaxKind.ForOfStatement:
|
||||
const forInOrOfStatement = parent as ForInOrOfStatement;
|
||||
return forInOrOfStatement.initializer === node ? forInOrOfStatement : undefined;
|
||||
case SyntaxKind.ParenthesizedExpression:
|
||||
case SyntaxKind.ArrayLiteralExpression:
|
||||
case SyntaxKind.SpreadElement:
|
||||
case SyntaxKind.NonNullExpression:
|
||||
case SyntaxKind.TypeAssertionExpression:
|
||||
case SyntaxKind.AsExpression:
|
||||
node = parent;
|
||||
break;
|
||||
case SyntaxKind.SpreadAssignment:
|
||||
node = parent.parent;
|
||||
break;
|
||||
case SyntaxKind.ShorthandPropertyAssignment:
|
||||
if ((parent as ShorthandPropertyAssignment).name !== node) {
|
||||
return undefined;
|
||||
}
|
||||
node = parent.parent;
|
||||
break;
|
||||
case SyntaxKind.PropertyAssignment:
|
||||
if ((parent as PropertyAssignment).name === node) {
|
||||
return undefined;
|
||||
}
|
||||
node = parent.parent;
|
||||
break;
|
||||
default:
|
||||
return undefined;
|
||||
}
|
||||
parent = node.parent;
|
||||
}
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
classNameReferencesInStaticElements.ts(12,2): error TS2629: Cannot assign to 'Foo' because it is a class.
|
||||
|
||||
|
||||
==== classNameReferencesInStaticElements.ts (1 errors) ====
|
||||
// https://github.com/microsoft/TypeScript/issues/54607
|
||||
class Foo {
|
||||
static { console.log(this, Foo) }
|
||||
static x = () => { console.log(this, Foo) }
|
||||
static y = function(this: unknown) { console.log(this, Foo) }
|
||||
|
||||
#x() { console.log(Foo); }
|
||||
x() { this.#x(); }
|
||||
}
|
||||
|
||||
const oldFoo = Foo;
|
||||
(Foo as any) = null;
|
||||
~~~
|
||||
!!! error TS2629: Cannot assign to 'Foo' because it is a class.
|
||||
oldFoo.x();
|
||||
oldFoo.y();
|
||||
new oldFoo().x();
|
||||
Loading…
x
Reference in New Issue
Block a user