mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-18 07:29:16 -05:00
Fix inferences between alias type arguments and defaulted alias type arguments (#51771)
This commit is contained in:
@@ -20871,7 +20871,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
if (variances === emptyArray) {
|
||||
return Ternary.Unknown;
|
||||
}
|
||||
const varianceResult = relateVariances(source.aliasTypeArguments, target.aliasTypeArguments, variances, intersectionState);
|
||||
const params = getSymbolLinks(source.aliasSymbol).typeParameters!;
|
||||
const minParams = getMinTypeArgumentCount(params);
|
||||
const sourceTypes = fillMissingTypeArguments(source.aliasTypeArguments, params, minParams, isInJSFile(source.aliasSymbol.valueDeclaration));
|
||||
const targetTypes = fillMissingTypeArguments(target.aliasTypeArguments, params, minParams, isInJSFile(source.aliasSymbol.valueDeclaration));
|
||||
const varianceResult = relateVariances(sourceTypes, targetTypes, variances, intersectionState);
|
||||
if (varianceResult !== undefined) {
|
||||
return varianceResult;
|
||||
}
|
||||
@@ -23805,8 +23809,12 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
if (source.aliasSymbol && source.aliasSymbol === target.aliasSymbol) {
|
||||
if (source.aliasTypeArguments) {
|
||||
// Source and target are types originating in the same generic type alias declaration.
|
||||
// Simply infer from source type arguments to target type arguments.
|
||||
inferFromTypeArguments(source.aliasTypeArguments, target.aliasTypeArguments!, getAliasVariances(source.aliasSymbol));
|
||||
// Simply infer from source type arguments to target type arguments, with defaults applied.
|
||||
const params = getSymbolLinks(source.aliasSymbol).typeParameters!;
|
||||
const minParams = getMinTypeArgumentCount(params);
|
||||
const sourceTypes = fillMissingTypeArguments(source.aliasTypeArguments, params, minParams, isInJSFile(source.aliasSymbol.valueDeclaration));
|
||||
const targetTypes = fillMissingTypeArguments(target.aliasTypeArguments, params, minParams, isInJSFile(source.aliasSymbol.valueDeclaration));
|
||||
inferFromTypeArguments(sourceTypes, targetTypes!, getAliasVariances(source.aliasSymbol));
|
||||
}
|
||||
// And if there weren't any type arguments, there's no reason to run inference as the types must be the same.
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user