TypeScript, пример из учебника: вывести литеральный тип юнион из элементов массива. Почему не работает со ссылкой на массив?
Если литерал массива задать как аргумент функции - работает как нужно. Но если передать в функцию ссылку на массив - не работает. Видимо, не понимаю чего-то фундаментального.
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"
Источник: Stack Overflow на русском