Skip to content

Commit efcccaa

Browse files
committed
Addressing more CR feedback
1 parent 471f6e0 commit efcccaa

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

src/compiler/checker.ts

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8973,16 +8973,16 @@ namespace ts {
89738973
checkDecorators(node);
89748974
}
89758975

8976-
function checkTypeArgumentConstraints(typeParameters: TypeParameter[], typeArguments: TypeNode[]) {
8977-
if (produceDiagnostics) {
8978-
for (let i = 0; i < typeParameters.length; i++) {
8979-
let constraint = getConstraintOfTypeParameter(typeParameters[i]);
8980-
if (constraint) {
8981-
let typeArgument = typeArguments[i];
8982-
checkTypeAssignableTo(getTypeFromTypeNode(typeArgument), constraint, typeArgument, Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
8983-
}
8976+
function checkTypeArgumentConstraints(typeParameters: TypeParameter[], typeArguments: TypeNode[]): boolean {
8977+
let result = true;
8978+
for (let i = 0; i < typeParameters.length; i++) {
8979+
let constraint = getConstraintOfTypeParameter(typeParameters[i]);
8980+
if (constraint) {
8981+
let typeArgument = typeArguments[i];
8982+
result = result && checkTypeAssignableTo(getTypeFromTypeNode(typeArgument), constraint, typeArgument, Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
89848983
}
89858984
}
8985+
return result;
89868986
}
89878987

89888988
function checkTypeReferenceNode(node: TypeReferenceNode | ExpressionWithTypeArguments) {
@@ -8991,9 +8991,11 @@ namespace ts {
89918991
if (type !== unknownType && node.typeArguments) {
89928992
// Do type argument local checks only if referenced type is successfully resolved
89938993
forEach(node.typeArguments, checkSourceElement);
8994-
let symbol = getNodeLinks(node).resolvedSymbol;
8995-
let typeParameters = symbol.flags & SymbolFlags.TypeAlias ? getSymbolLinks(symbol).typeParameters : (<TypeReference>type).target.localTypeParameters;
8996-
checkTypeArgumentConstraints(typeParameters, node.typeArguments);
8994+
if (produceDiagnostics) {
8995+
let symbol = getNodeLinks(node).resolvedSymbol;
8996+
let typeParameters = symbol.flags & SymbolFlags.TypeAlias ? getSymbolLinks(symbol).typeParameters : (<TypeReference>type).target.localTypeParameters;
8997+
checkTypeArgumentConstraints(typeParameters, node.typeArguments);
8998+
}
89978999
}
89989000
}
89999001

@@ -10595,7 +10597,9 @@ namespace ts {
1059510597
if (baseTypeNode.typeArguments) {
1059610598
forEach(baseTypeNode.typeArguments, checkSourceElement);
1059710599
for (let constructor of getConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments)) {
10598-
checkTypeArgumentConstraints(constructor.typeParameters, baseTypeNode.typeArguments);
10600+
if (!checkTypeArgumentConstraints(constructor.typeParameters, baseTypeNode.typeArguments)) {
10601+
break;
10602+
}
1059910603
}
1060010604
}
1060110605
checkTypeAssignableTo(type, baseType, node.name || node, Diagnostics.Class_0_incorrectly_extends_base_class_1);

0 commit comments

Comments
 (0)