我有一个简单的函数,可以接受一个类型为T
的对象或一个类型为T[]
的对象array.然后它将执行它的任务并返回一个与传入类型匹配的结果(即,如果传入一个数组,则返回一个结果数组,如果传入单个项,则返回单个结果).
翻译后的JS功能完全如预期的那样,但是类型系统坚持将数组嵌套在泛型中,我不知道为什么或者如何确保它解析为我想要的.
Example Function
type OneOrMany<T> = T | T[]
type Item = Record<string, any>
type CapitalizedProps<T extends Item> = {
[K in keyof T as Capitalize<K & string>]: T[K]
}
function toCapitalizedProps<T extends Item>(item: T): CapitalizedProps<T>
function toCapitalizedProps<T extends Item>(items: T[]): CapitalizedProps<T>[]
function toCapitalizedProps<T extends Item>(
itemOrItems: OneOrMany<T>,
): OneOrMany<CapitalizedProps<T>> {
if (Array.isArray(itemOrItems)) {
return itemOrItems.map((item) =>
toCapitalizedProps(item),
) as CapitalizedProps<T>[]
}
const result = { ...itemOrItems }
for (const key in result) {
result[(key[0].toUpperCase() + key.slice(1)) as keyof T] = result[key]
delete result[key]
}
return result as unknown as CapitalizedProps<T>
}