Изменения в новых версиях / TypeScript 5.4

// *** before: ***
function createLogger<T>(defaultLevel: T, levels: T[]): T {
    return defaultLevel;
}
// T выводится и из defaultLevel, и из levels - лишний элемент в levels
// незаметно расширяет T на весь список
createLogger("info", ["info""debug""typo"]); // T расширился, ошибки нет

// *** in version 5.4: ***
function createLoggerChecked<T>(defaultLevel: T, levels: NoInfer<T>[]): T {
    return defaultLevel;
}
createLoggerChecked("info", ["info""debug""typo"]);
// <-Error: T выводится только из defaultLevel ("info"),
// "typo" не входит в T = "info"