将 Record 的所有值转换为 Typescript 中的新 Record
Convert all values of a Record to a new Record in Typescript
我在 Typescript 中遇到问题,我无法从另一个获取 Record 对象。
function numberToString<Keys extends string>(record: Record<Keys, number>): Record<Keys, string> {
// Convert
}
// Example
const record: Record<"A" | "B", number> = {
"A": 10, "B": 20
};
const record2 = numberToString(record) /* {
"A": "10", "B": "20"
} */
由于对象的键是不可定义的,直接创建一个新的Record对象似乎是不可能的,因为不可能声明它的所有值。
这就是为什么我问你如何去做。提前致谢。
如果我没理解错的话,你想对所有数字进行字符串化。
方法如下:
type ConvertNumberToString<T extends Record<string, number>> = {
[Prop in keyof T]: `${T[Prop]}`
}
function numberToString<
Keys extends string,
Values extends number,
Obj extends Record<Keys, Values>
>
(record: Obj): ConvertNumberToString<Obj>
function numberToString<
Keys extends string,
Values extends number,
Obj extends Record<Keys, Values>
>
(record: Obj) {
return (Object.keys(record) as Keys[])
.reduce((acc, elem) => ({
...acc,
[elem]: `${record[elem]}`
}), {} as Record<Keys, string>)
}
const record = numberToString({ "A": 10, "B": 20 })
const a = record.A // '10'
${T[Prop]}
是一种特殊的语法,它允许您将数字
字符串化
我在 Typescript 中遇到问题,我无法从另一个获取 Record 对象。
function numberToString<Keys extends string>(record: Record<Keys, number>): Record<Keys, string> {
// Convert
}
// Example
const record: Record<"A" | "B", number> = {
"A": 10, "B": 20
};
const record2 = numberToString(record) /* {
"A": "10", "B": "20"
} */
由于对象的键是不可定义的,直接创建一个新的Record对象似乎是不可能的,因为不可能声明它的所有值。 这就是为什么我问你如何去做。提前致谢。
如果我没理解错的话,你想对所有数字进行字符串化。 方法如下:
type ConvertNumberToString<T extends Record<string, number>> = {
[Prop in keyof T]: `${T[Prop]}`
}
function numberToString<
Keys extends string,
Values extends number,
Obj extends Record<Keys, Values>
>
(record: Obj): ConvertNumberToString<Obj>
function numberToString<
Keys extends string,
Values extends number,
Obj extends Record<Keys, Values>
>
(record: Obj) {
return (Object.keys(record) as Keys[])
.reduce((acc, elem) => ({
...acc,
[elem]: `${record[elem]}`
}), {} as Record<Keys, string>)
}
const record = numberToString({ "A": 10, "B": 20 })
const a = record.A // '10'
${T[Prop]}
是一种特殊的语法,它允许您将数字