我有一些实用工具功能,想在打字稿中添加泛型类型,但不知道该怎么做。
(这些基于ramda的功能,但是我不想在该项目中使用ramda。)
选择:
function pick(keys,object) {
const result = Object.assign(
{},...keys.map(k => (k in object ? { [k]: object[k] } : {}))
);
return result;
}
拒绝:
function reject(keys,...Object.keys(object)
.filter(k => !keys.includes(k))
.map(k => ({ [k]: object[k] }))
);
return result;
}
}
...我想像这样使用它们,并让打字稿算出结果类型:
type Item = {title: string,description: string}
const test: { [key: string]: Item } = {
a: { title: 'TitleA',description: 'DescriptionA' },b: { title: 'TitleB',description: 'DescriptionB' },c: { title: 'TitleC',description: 'DescriptionC' },d: { title: 'TitleD',description: 'DescriptionD' }
};
const test1 = pick(['a','c'],test) // {a: { title: 'TitleA',description: 'DescriptionC' }}
const test2 = reject(['a',test) // {b: { title: 'TitleB',description: 'DescriptionD' }}
有人建议如何向这些
pick
和reject
函数添加通用类型吗?