TypeScript 中的自定义对象转换
Custom Object Conversion in TypeScript
我无法将其中一个对象映射到另一种类型的对象。
假设我有一个 User
和 Programmer
接口,如下所示。
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(',');
};
我无法将其中一个对象映射到另一种类型的对象。
假设我有一个 User
和 Programmer
接口,如下所示。
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(',');
};