Skip to content

Commit b4ec2e4

Browse files
committed
Handle destructuring zero elements from void
1 parent 9a3149b commit b4ec2e4

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

src/compiler/checker.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19518,6 +19518,21 @@ namespace ts {
1951819518
return type;
1951919519
}
1952019520

19521+
function checkNonNullNonVoidType(
19522+
type: Type,
19523+
node: Node,
19524+
nullDiagnostic?: DiagnosticMessage,
19525+
undefinedDiagnostic?: DiagnosticMessage,
19526+
nullOrUndefinedDiagnostic?: DiagnosticMessage,
19527+
voidDiagnostic?: DiagnosticMessage
19528+
): Type {
19529+
const nonNullType = checkNonNullType(type, node, nullDiagnostic, undefinedDiagnostic, nullOrUndefinedDiagnostic);
19530+
if (nonNullType !== errorType && nonNullType.flags & TypeFlags.Void) {
19531+
error(node, voidDiagnostic || Diagnostics.Object_is_possibly_undefined);
19532+
}
19533+
return nonNullType;
19534+
}
19535+
1952119536
function checkPropertyAccessExpression(node: PropertyAccessExpression) {
1952219537
return checkPropertyAccessExpressionOrQualifiedName(node, node.expression, node.name);
1952319538
}
@@ -26258,7 +26273,7 @@ namespace ts {
2625826273
if (node.initializer && node.parent.parent.kind !== SyntaxKind.ForInStatement) {
2625926274
const initializerType = checkExpressionCached(node.initializer);
2626026275
if (strictNullChecks && node.name.elements.length === 0) {
26261-
checkNonNullType(initializerType, node);
26276+
checkNonNullNonVoidType(initializerType, node);
2626226277
}
2626326278
else {
2626426279
checkTypeAssignableToAndOptionallyElaborate(initializerType, getWidenedTypeForVariableLikeDeclaration(node), node, node.initializer);

0 commit comments

Comments
 (0)