我可以扩展打字稿界面以将所有密钥放在新密钥下吗?



我有一个现有的Typescript接口,如下所示:

interface Person {
name: string;
age: number;
pet: string;
}

另一种方法(不受我的控制(要求输入将每个值放置在对象中,{value: value}如下所示:

update({
name: {value: "string"},
age: {value: 0},
pet: {value: "dog"}
})

有没有办法扩展或利用我现有的Person界面来创建新的typeinterface以匹配所需的格式?

这样的事情会起作用:

interface Person {
name: string;
age: number;
pet: string;
}
type AwkwardPerson = {
[K in keyof Person]: { value: Person[K] }
}
let newTyped: AwkwardPerson = {
name: {value: "string"},
age: {value: 0},
pet: {value: "dog"}
}

我们迭代人的键,并给出具有正确类型的所需形状。

如果你有很多需要转换的接口,你可以像这样制作一个通用转换器(而不是重复自己(:

type MakeAwkward<T> = {
[key in keyof T]: { value: T[key] }
}
type GenericAwkwardPerson = MakeAwkward<Person>
let genericTyped: GenericAwkwardPerson = {
name: {value: "string"},
age: {value: 0},
pet: {value: "dog"}
}

您提供给MakeAwkward的任何接口<>在尖括号内都将转换为兼容类型。

最新更新