带限制键的TypeScript字典

带限制键的TypeScript字典,typescript,dictionary,Typescript,Dictionary,我想使用TypeScript创建一个字典类型,将字符串映射到对象。 我希望字符串的值限制如下 type Person={ id:字符串; 名称:字符串; 年龄:人数; } 类型字典yofpersonneedsfixing={ [IDshouldbereRestrictedToMatchPersonid:string]:个人; } let persons:DictionaryOfPersonNeedsFixing={ '1': { id:'1', 姓名:'约翰', 年龄:31 }, “错误ID”:

我想使用TypeScript创建一个字典类型,将字符串映射到对象。 我希望字符串的值限制如下

type Person={
id:字符串;
名称:字符串;
年龄:人数;
}
类型字典yofpersonneedsfixing={
[IDshouldbereRestrictedToMatchPersonid:string]:个人;
}
let persons:DictionaryOfPersonNeedsFixing={
'1': {
id:'1',
姓名:'约翰',
年龄:31
},
“错误ID”:{
id:'2',
名字:“吉姆”,
年龄:37
}
}
在上面的代码中,我希望TypeScript告诉我
错误ID
不是允许的键,我们只能使用“2”作为键

或者另一种方式是,TypeScript应该告诉我
id:'2'
是不允许的,并且
id
应该设置为
erroid

我已尝试更新
Person
类型以限制
id
,如下所示:

type Person={
id:K;
名称:字符串;
年龄:人数;
}
现在,我可以使用以下语法创建一个人,他的
id
必须是
'2'

让jim:Person={
id:'2',
名字:“吉姆”
年龄:37
}
在这里,如果我试图将
id
字段设置为
'2'
以外的任何值,就会出现一个错误

类似地,我可以更新
Dictionary
对象,将密钥集限制为预定义集,如下所示:

type DictionaryOfPersonsWithRestrictedIds={
[id在'1'|'2'|'3'中]?:Person;
}
这样,TypeScript告诉我如果
Person.id
与字典键不匹配,就会出现错误。例如

让PersonWithIncorrectKey:DictionaryOfPersonWithRestrictEdds={
'1': {
id:'1',
姓名:'约翰',
年龄:31
},
'ErrorId':{//我得到了整个对象的红色曲线,因为ErrorId不是允许的键
id:'2',
名字:“吉姆”,
年龄:37
}
}
let PersonWithIncorrectKey:DictionaryOfPersonWithRestrictedId={
'1': {
id:'1',
姓名:'约翰',
年龄:31
},
'2': {
id:'3',//由于预期为'2',我在id下得到一个红色的波形。
名字:“吉姆”,
年龄:37
}
}
我希望能够对任何
id
执行此操作,而不仅仅是预定义的列表

我希望字典键与任何可能的
id
Person
id
字段匹配(即一致)


使用TypeScript类型/接口而不必编写自己的验证函数,这是否可行?

是否适用于您?如果是的话,我会写一封信anwer@jcalz是的,是的!对你有用吗?如果是的话,我会写一封信anwer@jcalz是的,是的!