给定 Person
的接口,我想在此基础上创建一个新的接口 HasmapOfPersonsOverTime
。我将推送 Person 对象的更新(即,如果一个人有生日,我会将新的年龄数字以及该人庆祝生日的时间作为对象推送到 age 属性的数组中)。
... 象征其余的属性
interface Person {
age:number;
name:string;
...
}
我想要一个看起来像这样的界面:
interface HasmapOfPersonsOverTime {
[id:string]:{
age:[
{
age:number
time:string
}
]
},
name:[
{
name:string
time:string
}
]
},
...
}
并举例说明我想如何使用它:
const list:HasmapOfPersonsOverTime = {
"1515":{
age:[
{
age:24,
time:"2020-03-05T21:53:37"
},
{
age:25,
time:"2021-03-05T18:22:05"
}
],
name:[
{
name:"bar",
time:"1996-03-05T21:53:37"
}
],
...
}
}
我已经走了这么远,但我无法获得属性的类型安全。我创建“值”:字符串,我想要正确的人属性。
interface Person {
age:number;
name:string;
}
type HasmapOfPersonsOverTime <T extends Object> = Record<string,Record<keyof T, {'value':string,'time':string}[]>>
const list: HasmapOfPersonsOverTime<Person> = {
"1515":{
age:[
{
value:"24",
time:"2020-03-05T21:53:37"
},
{
value:"25",
time:"2021-03-05T18:22:05"
}
],
name:[
{
value:"name",
time:"1996-03-05T21:53:37"
}
]
}
}
答案 0 :(得分:2)
您可以使用以下 mapped type,也可以与其他内置类型一起使用,例如 Pick
type Person = {
age: number;
name: string;
};
type OverTime<T> = {
[K in keyof T]: (Pick<T, K> & { time: string })[];
};
type HashmapOfPersonOverTime = Record<string, OverTime<Person>>;