TypeScript, пример из учебника: вывести литеральный тип юнион из элементов массива. Почему не работает со ссылкой на массив?

Рейтинг: 0Ответов: 0Опубликовано: 27.04.2023

Если литерал массива задать как аргумент функции - работает как нужно. Но если передать в функцию ссылку на массив - не работает. Видимо, не понимаю чего-то фундаментального.

function strEnum<T extends string>(arr: T[]): {[K in T]: K}{
    return arr.reduce((res, key) => {
        res[key] = key;
        return res;
    }, Object.create(null))
}

const array = ['str', 'utr', 'dtr'];

const objFromArr = strEnum(array)
type ObjFromArr = keyof typeof objFromArr; //string | number

const objFromArr2 = strEnum(['str', 'utr', 'dtr']);
type ObjFromArr2 = keyof typeof objFromArr2; //"str" | "utr" | "dtr"

Ответы

Ответов пока нет.