Мне нужно написать на typeScript типы для функции, которая принимает объект config, в свойствах которого записаны функции, а возвращает объект с теме же свойствами что и config, но в значениях записаны результат выполнения функции:
function init (config) {
return Object
.keys(config)
.reduce((prev, key)=>
{
prev[key] = config[key]()
return prev
}, {})
}
Подскажите, пожалуйста, как на TypeScript можно описать тип такой функции?
Т.е. функция init как бы будет библиотечная, и другие разработчики, смогут её вызывать, например, вот так:
let temp = init({a:()=>5 as number, b:()=>[3,4] as number[]}).
Тогда в temp будет записан объект {a:5, b:[3,4]}, и хочется что бы typescript автоматически вывел его (temp) типы, и ругался бы, например, на вызов temp.a.map() т.к. в свойстве 'a' объекта temp находится число, а не массив т.к. в параметре функции init в свойстве 'a' была функция, которая возращает число, следовательно после выполнения функции init там будет число. Хочется понять, как можно указать типы для функции init, что бы это работало...
Совместными усилиями нашли:
function init<T extends { [k: string]: () => any }>(config: T):{[r in keyof T]:ReturnType<T[r]>} {....}
И это работает, после вызова, например
let temp = init({a:()=>5 as number, b:()=>[3,4] as number[]}).
TypeScript автоматически выведет для temp тип {a:number, b:number[]} и срезультатом работы функции можно будет нормально работать.
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
такая проблема, уже неделю пытаюсь получить массив с имена участников гильдии, все мои попытки кончатся крахом, знает кто простой способ...
пытаюсь вывести компонент через алерт по нажатии кнопки, но что-то не получается, что же делать?