@@ -12862,7 +12862,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
12862
12862
indexInfos = source.declaredIndexInfos;
12863
12863
}
12864
12864
else {
12865
- mapper = createTypeMapper(typeParameters, typeArguments);
12865
+ mapper = createTypeMapper(
12866
+ typeParameters,
12867
+ isTupleType(type) ? map(typeArguments, (t, i) => addOptionality(t, /*isProperty*/ true, !!(type.target.elementFlags[i] & ElementFlags.Optional))) : typeArguments
12868
+ );
12866
12869
members = createInstantiatedSymbolTable(source.declaredProperties, mapper, /*mappingThisOnly*/ typeParameters.length === 1);
12867
12870
callSignatures = instantiateSignatures(source.declaredCallSignatures, mapper);
12868
12871
constructSignatures = instantiateSignatures(source.declaredConstructSignatures, mapper);
@@ -15563,7 +15566,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
15563
15566
const typeArguments = !node ? emptyArray :
15564
15567
node.kind === SyntaxKind.TypeReference ? concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters!)) :
15565
15568
node.kind === SyntaxKind.ArrayType ? [getTypeFromTypeNode(node.elementType)] :
15566
- map(node.elements, element => removeMissingType( getTypeFromTypeNode(element), element .kind === SyntaxKind.OptionalType));
15569
+ map(node.elements, element => getTypeFromTypeNode(element.kind === SyntaxKind.OptionalType ? (element as OptionalTypeNode).type : element ));
15567
15570
if (popTypeResolution()) {
15568
15571
type.resolvedTypeArguments = type.mapper ? instantiateTypes(typeArguments, type.mapper) : typeArguments;
15569
15572
}
@@ -22723,11 +22726,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
22723
22726
}
22724
22727
}
22725
22728
22729
+ // TODO: recheck if `addOptionality` shouldn't get called here as well
22726
22730
const sourceType = removeMissingType(sourceTypeArguments[sourcePosition], !!(sourceFlags & targetFlags & ElementFlags.Optional));
22727
22731
const targetType = targetTypeArguments[targetPosition];
22732
+ const isTargetOptional = !!(targetFlags & ElementFlags.Optional);
22728
22733
22729
22734
const targetCheckType = sourceFlags & ElementFlags.Variadic && targetFlags & ElementFlags.Rest ? createArrayType(targetType) :
22730
- removeMissingType(targetType, !!(targetFlags & ElementFlags.Optional) );
22735
+ removeMissingType(addOptionality( targetType, /*isProperty*/ true, isTargetOptional), isTargetOptional );
22731
22736
const related = isRelatedTo(sourceType, targetCheckType, RecursionFlags.Both, reportErrors, /*headMessage*/ undefined, intersectionState);
22732
22737
if (!related) {
22733
22738
if (reportErrors && (targetArity > 1 || sourceArity > 1)) {
0 commit comments