mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Fix cfa
This commit is contained in:
@@ -932,6 +932,9 @@ namespace ts {
|
||||
case SyntaxKind.BinaryExpression:
|
||||
switch ((<BinaryExpression>expr).operatorToken.kind) {
|
||||
case SyntaxKind.EqualsToken:
|
||||
case SyntaxKind.BarBarEqualsToken:
|
||||
case SyntaxKind.AmpersandAmpersandEqualsToken:
|
||||
case SyntaxKind.QuestionQuestionEqualsToken:
|
||||
return isNarrowableOperand((<BinaryExpression>expr).left);
|
||||
case SyntaxKind.CommaToken:
|
||||
return isNarrowableOperand((<BinaryExpression>expr).right);
|
||||
@@ -1047,7 +1050,7 @@ namespace ts {
|
||||
function isLogicalAssignmentExpressioin(node: Node) {
|
||||
while (true) {
|
||||
if (isParenthesizedExpression(node)) {
|
||||
node = node.expression
|
||||
node = node.expression;
|
||||
}
|
||||
else {
|
||||
return isBinaryExpression(node) && isLogicalAssignmentOperator(node.operatorToken.kind);
|
||||
@@ -1194,11 +1197,14 @@ namespace ts {
|
||||
else {
|
||||
bindCondition(node.left, trueTarget, preRightLabel);
|
||||
}
|
||||
|
||||
currentFlow = finishFlowLabel(preRightLabel);
|
||||
bind(node.operatorToken);
|
||||
|
||||
doWithConditionalBranches(bind, node.right, trueTarget, falseTarget);
|
||||
bindAssignmentTargetFlow(node.left);
|
||||
|
||||
addAntecedent(trueTarget, createFlowCondition(FlowFlags.TrueCondition, currentFlow, node));
|
||||
addAntecedent(falseTarget, createFlowCondition(FlowFlags.FalseCondition, currentFlow, node));
|
||||
}
|
||||
|
||||
function bindReturnOrThrow(node: ReturnStatement | ThrowStatement): void {
|
||||
@@ -1488,10 +1494,6 @@ namespace ts {
|
||||
}
|
||||
|
||||
function bindBinaryExpressionFlow(node: BinaryExpression) {
|
||||
const flow = currentFlow
|
||||
if (flow) {
|
||||
|
||||
}
|
||||
const workStacks: {
|
||||
expr: BinaryExpression[],
|
||||
state: BindBinaryExpressionFlowState[],
|
||||
|
||||
@@ -2594,7 +2594,7 @@ namespace ts {
|
||||
switch (parent.kind) {
|
||||
case SyntaxKind.BinaryExpression:
|
||||
const binaryOperator = (<BinaryExpression>parent).operatorToken.kind;
|
||||
return isAssignmentOperator(binaryOperator) && (<BinaryExpression>parent).left === node ?
|
||||
return isAssignmentOperator(binaryOperator) && !isLogicalAssignmentOperator(binaryOperator) && (<BinaryExpression>parent).left === node ?
|
||||
binaryOperator === SyntaxKind.EqualsToken ? AssignmentKind.Definite : AssignmentKind.Compound :
|
||||
AssignmentKind.None;
|
||||
case SyntaxKind.PrefixUnaryExpression:
|
||||
|
||||
@@ -60,16 +60,16 @@ f ??= 42
|
||||
|
||||
g &&= 42
|
||||
>g &&= 42 : 0 | 42
|
||||
>g : number
|
||||
>g : 0 | 1 | 42
|
||||
>42 : 42
|
||||
|
||||
h ||= 42
|
||||
>h ||= 42 : number
|
||||
>h : number
|
||||
>h ||= 42 : 1 | 42
|
||||
>h : 0 | 1 | 42
|
||||
>42 : 42
|
||||
|
||||
i ??= 42
|
||||
>i ??= 42 : number
|
||||
>i : number
|
||||
>i ??= 42 : 0 | 1 | 42
|
||||
>i : 0 | 1 | 42
|
||||
>42 : 42
|
||||
|
||||
|
||||
@@ -60,16 +60,16 @@ f ??= 42
|
||||
|
||||
g &&= 42
|
||||
>g &&= 42 : 0 | 42
|
||||
>g : number
|
||||
>g : 0 | 1 | 42
|
||||
>42 : 42
|
||||
|
||||
h ||= 42
|
||||
>h ||= 42 : number
|
||||
>h : number
|
||||
>h ||= 42 : 1 | 42
|
||||
>h : 0 | 1 | 42
|
||||
>42 : 42
|
||||
|
||||
i ??= 42
|
||||
>i ??= 42 : number
|
||||
>i : number
|
||||
>i ??= 42 : 0 | 1 | 42
|
||||
>i : 0 | 1 | 42
|
||||
>42 : 42
|
||||
|
||||
|
||||
@@ -60,16 +60,16 @@ f ??= 42
|
||||
|
||||
g &&= 42
|
||||
>g &&= 42 : 0 | 42
|
||||
>g : number
|
||||
>g : 0 | 1 | 42
|
||||
>42 : 42
|
||||
|
||||
h ||= 42
|
||||
>h ||= 42 : number
|
||||
>h : number
|
||||
>h ||= 42 : 1 | 42
|
||||
>h : 0 | 1 | 42
|
||||
>42 : 42
|
||||
|
||||
i ??= 42
|
||||
>i ??= 42 : number
|
||||
>i : number
|
||||
>i ??= 42 : 0 | 1 | 42
|
||||
>i : 0 | 1 | 42
|
||||
>42 : 42
|
||||
|
||||
|
||||
@@ -30,34 +30,34 @@ declare const c: A
|
||||
|
||||
a.baz &&= result.baz
|
||||
>a.baz &&= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.baz : string | number | undefined
|
||||
>a.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.baz ||= result.baz
|
||||
>b.baz ||= result.baz : string | number | undefined
|
||||
>b.baz : string | number | undefined
|
||||
>b.baz ||= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.baz ??= result.baz
|
||||
>c.baz ??= result.baz : string | number | undefined
|
||||
>c.baz : string | number | undefined
|
||||
>c.baz ??= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
a.foo["baz"] &&= result.foo.baz
|
||||
>a.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo["baz"] : string | number | undefined
|
||||
>a.foo["baz"] : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -70,7 +70,7 @@ a.foo["baz"] &&= result.foo.baz
|
||||
|
||||
b.foo["baz"] &&= result.foo.baz
|
||||
>b.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo["baz"] : string | number | undefined
|
||||
>b.foo["baz"] : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -83,7 +83,7 @@ b.foo["baz"] &&= result.foo.baz
|
||||
|
||||
c.foo["baz"] &&= result.foo.baz
|
||||
>c.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo["baz"] : string | number | undefined
|
||||
>c.foo["baz"] : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -96,14 +96,14 @@ c.foo["baz"] &&= result.foo.baz
|
||||
|
||||
a.foo.bar().baz &&= result.foo.bar().baz
|
||||
>a.foo.bar().baz &&= result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo.bar().baz : string | number | undefined
|
||||
>a.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -114,15 +114,15 @@ a.foo.bar().baz &&= result.foo.bar().baz
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.foo.bar().baz ||= result.foo.bar().baz
|
||||
>b.foo.bar().baz ||= result.foo.bar().baz : string | number | undefined
|
||||
>b.foo.bar().baz : string | number | undefined
|
||||
>b.foo.bar().baz ||= result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -133,15 +133,15 @@ b.foo.bar().baz ||= result.foo.bar().baz
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.foo.bar().baz ??= result.foo.bar().baz
|
||||
>c.foo.bar().baz ??= result.foo.bar().baz : string | number | undefined
|
||||
>c.foo.bar().baz : string | number | undefined
|
||||
>c.foo.bar().baz ??= result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
|
||||
@@ -30,34 +30,34 @@ declare const c: A
|
||||
|
||||
a.baz &&= result.baz
|
||||
>a.baz &&= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.baz : string | number | undefined
|
||||
>a.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.baz ||= result.baz
|
||||
>b.baz ||= result.baz : string | number | undefined
|
||||
>b.baz : string | number | undefined
|
||||
>b.baz ||= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.baz ??= result.baz
|
||||
>c.baz ??= result.baz : string | number | undefined
|
||||
>c.baz : string | number | undefined
|
||||
>c.baz ??= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
a.foo["baz"] &&= result.foo.baz
|
||||
>a.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo["baz"] : string | number | undefined
|
||||
>a.foo["baz"] : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -70,7 +70,7 @@ a.foo["baz"] &&= result.foo.baz
|
||||
|
||||
b.foo["baz"] &&= result.foo.baz
|
||||
>b.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo["baz"] : string | number | undefined
|
||||
>b.foo["baz"] : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -83,7 +83,7 @@ b.foo["baz"] &&= result.foo.baz
|
||||
|
||||
c.foo["baz"] &&= result.foo.baz
|
||||
>c.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo["baz"] : string | number | undefined
|
||||
>c.foo["baz"] : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -96,14 +96,14 @@ c.foo["baz"] &&= result.foo.baz
|
||||
|
||||
a.foo.bar().baz &&= result.foo.bar().baz
|
||||
>a.foo.bar().baz &&= result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo.bar().baz : string | number | undefined
|
||||
>a.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -114,15 +114,15 @@ a.foo.bar().baz &&= result.foo.bar().baz
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.foo.bar().baz ||= result.foo.bar().baz
|
||||
>b.foo.bar().baz ||= result.foo.bar().baz : string | number | undefined
|
||||
>b.foo.bar().baz : string | number | undefined
|
||||
>b.foo.bar().baz ||= result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -133,15 +133,15 @@ b.foo.bar().baz ||= result.foo.bar().baz
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.foo.bar().baz ??= result.foo.bar().baz
|
||||
>c.foo.bar().baz ??= result.foo.bar().baz : string | number | undefined
|
||||
>c.foo.bar().baz : string | number | undefined
|
||||
>c.foo.bar().baz ??= result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
|
||||
@@ -30,34 +30,34 @@ declare const c: A
|
||||
|
||||
a.baz &&= result.baz
|
||||
>a.baz &&= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.baz : string | number | undefined
|
||||
>a.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.baz ||= result.baz
|
||||
>b.baz ||= result.baz : string | number | undefined
|
||||
>b.baz : string | number | undefined
|
||||
>b.baz ||= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.baz ??= result.baz
|
||||
>c.baz ??= result.baz : string | number | undefined
|
||||
>c.baz : string | number | undefined
|
||||
>c.baz ??= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
a.foo["baz"] &&= result.foo.baz
|
||||
>a.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo["baz"] : string | number | undefined
|
||||
>a.foo["baz"] : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -70,7 +70,7 @@ a.foo["baz"] &&= result.foo.baz
|
||||
|
||||
b.foo["baz"] &&= result.foo.baz
|
||||
>b.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo["baz"] : string | number | undefined
|
||||
>b.foo["baz"] : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -83,7 +83,7 @@ b.foo["baz"] &&= result.foo.baz
|
||||
|
||||
c.foo["baz"] &&= result.foo.baz
|
||||
>c.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo["baz"] : string | number | undefined
|
||||
>c.foo["baz"] : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -96,14 +96,14 @@ c.foo["baz"] &&= result.foo.baz
|
||||
|
||||
a.foo.bar().baz &&= result.foo.bar().baz
|
||||
>a.foo.bar().baz &&= result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo.bar().baz : string | number | undefined
|
||||
>a.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -114,15 +114,15 @@ a.foo.bar().baz &&= result.foo.bar().baz
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.foo.bar().baz ||= result.foo.bar().baz
|
||||
>b.foo.bar().baz ||= result.foo.bar().baz : string | number | undefined
|
||||
>b.foo.bar().baz : string | number | undefined
|
||||
>b.foo.bar().baz ||= result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
@@ -133,15 +133,15 @@ b.foo.bar().baz ||= result.foo.bar().baz
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.foo.bar().baz ??= result.foo.bar().baz
|
||||
>c.foo.bar().baz ??= result.foo.bar().baz : string | number | undefined
|
||||
>c.foo.bar().baz : string | number | undefined
|
||||
>c.foo.bar().baz ??= result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
|
||||
@@ -18,30 +18,30 @@ declare const c: A;
|
||||
|
||||
(a.baz) &&= result.baz;
|
||||
>(a.baz) &&= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>(a.baz) : string | number | undefined
|
||||
>a.baz : string | number | undefined
|
||||
>(a.baz) : "" | 0 | 1 | 42 | undefined
|
||||
>a.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
(b.baz) ||= result.baz;
|
||||
>(b.baz) ||= result.baz : string | number | undefined
|
||||
>(b.baz) : string | number | undefined
|
||||
>b.baz : string | number | undefined
|
||||
>(b.baz) ||= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>(b.baz) : "" | 0 | 1 | 42 | undefined
|
||||
>b.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
(c.baz) ??= result.baz;
|
||||
>(c.baz) ??= result.baz : string | number | undefined
|
||||
>(c.baz) : string | number | undefined
|
||||
>c.baz : string | number | undefined
|
||||
>(c.baz) ??= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>(c.baz) : "" | 0 | 1 | 42 | undefined
|
||||
>c.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
@@ -18,30 +18,30 @@ declare const c: A;
|
||||
|
||||
(a.baz) &&= result.baz;
|
||||
>(a.baz) &&= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>(a.baz) : string | number | undefined
|
||||
>a.baz : string | number | undefined
|
||||
>(a.baz) : "" | 0 | 1 | 42 | undefined
|
||||
>a.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
(b.baz) ||= result.baz;
|
||||
>(b.baz) ||= result.baz : string | number | undefined
|
||||
>(b.baz) : string | number | undefined
|
||||
>b.baz : string | number | undefined
|
||||
>(b.baz) ||= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>(b.baz) : "" | 0 | 1 | 42 | undefined
|
||||
>b.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
(c.baz) ??= result.baz;
|
||||
>(c.baz) ??= result.baz : string | number | undefined
|
||||
>(c.baz) : string | number | undefined
|
||||
>c.baz : string | number | undefined
|
||||
>(c.baz) ??= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>(c.baz) : "" | 0 | 1 | 42 | undefined
|
||||
>c.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
@@ -18,30 +18,30 @@ declare const c: A;
|
||||
|
||||
(a.baz) &&= result.baz;
|
||||
>(a.baz) &&= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>(a.baz) : string | number | undefined
|
||||
>a.baz : string | number | undefined
|
||||
>(a.baz) : "" | 0 | 1 | 42 | undefined
|
||||
>a.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
(b.baz) ||= result.baz;
|
||||
>(b.baz) ||= result.baz : string | number | undefined
|
||||
>(b.baz) : string | number | undefined
|
||||
>b.baz : string | number | undefined
|
||||
>(b.baz) ||= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>(b.baz) : "" | 0 | 1 | 42 | undefined
|
||||
>b.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
(c.baz) ??= result.baz;
|
||||
>(c.baz) ??= result.baz : string | number | undefined
|
||||
>(c.baz) : string | number | undefined
|
||||
>c.baz : string | number | undefined
|
||||
>(c.baz) ??= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>(c.baz) : "" | 0 | 1 | 42 | undefined
|
||||
>c.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c : A
|
||||
>baz : string | number | undefined
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
@@ -51,8 +51,8 @@ function foo3 (f?: (a: number) => void) {
|
||||
>a : any
|
||||
|
||||
f(42)
|
||||
>f(42) : any
|
||||
>f : undefined
|
||||
>f(42) : void
|
||||
>f : ((a: number) => void) | undefined
|
||||
>42 : 42
|
||||
}
|
||||
|
||||
@@ -126,8 +126,8 @@ function bar3 (f?: (a: number) => void) {
|
||||
>a : any
|
||||
|
||||
f(42)
|
||||
>f(42) : any
|
||||
>f : undefined
|
||||
>f(42) : void
|
||||
>f : ((a: number) => void) | undefined
|
||||
>42 : 42
|
||||
}
|
||||
|
||||
|
||||
@@ -51,8 +51,8 @@ function foo3 (f?: (a: number) => void) {
|
||||
>a : any
|
||||
|
||||
f(42)
|
||||
>f(42) : any
|
||||
>f : undefined
|
||||
>f(42) : void
|
||||
>f : ((a: number) => void) | undefined
|
||||
>42 : 42
|
||||
}
|
||||
|
||||
@@ -126,8 +126,8 @@ function bar3 (f?: (a: number) => void) {
|
||||
>a : any
|
||||
|
||||
f(42)
|
||||
>f(42) : any
|
||||
>f : undefined
|
||||
>f(42) : void
|
||||
>f : ((a: number) => void) | undefined
|
||||
>42 : 42
|
||||
}
|
||||
|
||||
|
||||
@@ -51,8 +51,8 @@ function foo3 (f?: (a: number) => void) {
|
||||
>a : any
|
||||
|
||||
f(42)
|
||||
>f(42) : any
|
||||
>f : undefined
|
||||
>f(42) : void
|
||||
>f : ((a: number) => void) | undefined
|
||||
>42 : 42
|
||||
}
|
||||
|
||||
@@ -126,8 +126,8 @@ function bar3 (f?: (a: number) => void) {
|
||||
>a : any
|
||||
|
||||
f(42)
|
||||
>f(42) : any
|
||||
>f : undefined
|
||||
>f(42) : void
|
||||
>f : ((a: number) => void) | undefined
|
||||
>42 : 42
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user