新版本的变更 / TypeScript 5.0

// *** before: ***
function getNames<T extends string>(arr: T[]) {
    return arr;
}
const namesWidened = getNames(["a""b"]); // выведен string[], литералы
//потеряны
function needsAsConst<T extends readonly string[]>(arr: T) { return arr; }
const namesAsConst = needsAsConst(["a""b"as const); // as const нужно было
//руками

// *** in version 5.0: ***
function getNamesConst<const T extends string[]>(arr: T) {
    return arr;
}
const namesLiteral = getNamesConst(["a""b"]);
// namesLiteral: readonly ["a", "b"] - без ручного as const на вызове