将 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'

Playground

${T[Prop]} 是一种特殊的语法,它允许您将数字

字符串化