TypeScript 中的自定义对象转换

Custom Object Conversion in TypeScript

我无法将其中一个对象映射到另一种类型的对象。

假设我有一个 UserProgrammer 接口,如下所示。

interface User {
    name: string;
    age: number;
    languages: string[]
}

interface Programmer {
    name: string;
    age: number;
    languages: string;
}

而我想隐蔽如下

const user_john: User = {
    name: "john",
    age:20,
    languages: ["React", "Angular", "Vue"]
}
const programmer_john = {
    name: "john",
    age:20,
    languages: "React,Angular,Vue"
}

这是我想做的。

let programmer: Programmer = {} as Programmer;

Object.keys(user_john).map((key: string) => {
    programmer[key] = user_john[key]
})

但它给了我错误,并说我需要输入 any 或 @ts-ignore。我不想这样做。这只是我的代码的简化版本。实际代码对每个接口都有更多的键,这让我不想一个一个地手动映射它。

我相信我发现 post 正在谈论 const getKeyValue = <U extends keyof T, T extends object>(key: U) => (obj: T) => obj[key]; 但是我没有工作,或者我不确定如何正确使用它。

有人可以帮我解决这个问题吗?

当您可以在一条语句中同时创建所有对象时,TypeScript 通常最有效。

您不需要显式地遍历所有键 - 您可以使用 rest 语法将原始对象的所有键值对放入新对象中,并添加一个新的 属性 加入languages 数组。

const programmer_john: Programmer = {
  ...user_john,
  languages: user_john.languages.join(',');
};