Don't generalize when assigment target is never (fix: #41707) (#59774)

This commit is contained in:
Yevhenii Hyzyla
2024-08-29 21:20:28 +02:00
committed by GitHub
parent 342d142548
commit eadb9e18f9
30 changed files with 197 additions and 78 deletions

View File

@@ -22056,8 +22056,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
const [sourceType, targetType] = getTypeNamesForErrorDisplay(source, target);
let generalizedSource = source;
let generalizedSourceType = sourceType;
if (isLiteralType(source) && !typeCouldHaveTopLevelSingletonTypes(target)) {
// Don't generalize on 'never' - we really want the original type
// to be displayed for use-cases like 'assertNever'.
if (!(target.flags & TypeFlags.Never) && isLiteralType(source) && !typeCouldHaveTopLevelSingletonTypes(target)) {
generalizedSource = getBaseTypeOfLiteralType(source);
Debug.assert(!isTypeAssignableTo(generalizedSource, target), "generalized source shouldn't be assignable");
generalizedSourceType = getTypeNameForErrorDisplay(generalizedSource);