我想写一个函数把对象中的一个特定值从字符串转换成数字。
下面是我的函数:
export function convertStringToNumber<K extends string>(
obj: Record<K, object>,
val: string
): Record<K, number> {
const result: Partial<Record<K, unknown>> = {}
for (const key in obj) {
if (key === val) {
result[key] = Number(obj[key])
} else {
result[key] = obj[key]
}
}
return result as Record<K, number>
}
我的函数可以工作,但是我的TypeScript抱怨类型。TypeScript可以接受输入类型,然后将相应键的类型更改为数字吗?
我有第二个版本,也许这个版本更合适:
export function convertStringToNumber2<T> (
obj: T,
val: string
): T {
const result: Partial<T> = {}
for (const key in obj) {
if (key === val) {
result[key] = Number(obj[key])
} else {
result[key] = obj[key]
}
}
return result
}
TypeScript正在抱怨:类型"number"不能赋给类型"T [Extract〈keyof T,string〉]"。ts(2322)
1条答案
按热度按时间pw9qyyiw1#
通过使用两个泛型,你可以在实用程序类型
Omit<Type, Keys>
和Record<Keys, Type>
的帮助下从你的输入中派生出一个返回类型,如下所示:TSPlayground
从TS Playground编译的JS: