Javascript 类型检查返回对象中的键值用法是否正确

Javascript 类型检查返回对象中的键值用法是否正确,javascript,typescript,types,Javascript,Typescript,Types,我对可能的响应主体有一个(生成的)类型定义: 类型响应映射={ '200':{'ok':true}, '404':{'error':true,键入'NotFound'}, “500”:空, } 我想写一个函数,根据上面的输入检查返回{code,body}形状的对象 我能做到的最好的事情是: 类型代码=主体类型 类型响应DebodyPair={ 代码:代码, 正文:正文[代码] } 函数端点():ResponseCodeBodyPair{ if(Math.random()){ 返回{code:'

我对可能的响应主体有一个(生成的)类型定义:

类型响应映射={
'200':{'ok':true},
'404':{'error':true,键入'NotFound'},
“500”:空,
}
我想写一个函数,根据上面的输入检查返回
{code,body}
形状的对象

我能做到的最好的事情是:

类型代码=主体类型
类型响应DebodyPair={
代码:代码,
正文:正文[代码]
}
函数端点():ResponseCodeBodyPair{
if(Math.random()){
返回{code:'200',正文:{'ok':true}
}
if(Math.random()){
返回{code:'404',正文:{'error':true,类型:'NotFound'}
}
if(Math.random()){
返回{code:'500',body:null}
}
//这应该会失败,因为{ok:true}不是404的有效主体。
返回{代码:'404',正文:{'ok':true}
}
这将检查函数是否返回未知状态代码,以及所有返回的实体是否与一个可能的实体形状对应

它没有检查上一次返回所证明的代码到主体配对的正确性

如何将状态代码的类型限制为精确的身体形状

我需要像这样的东西

type ResponseCodeBodyPair=
机构代码?{code:code,body:body[code]}:从不
……但这当然行不通

我曾多次为同样的事情挣扎,但总是放弃。是真的不可能还是我遗漏了什么



另外,我知道如果类型是
{code:'200',body:…}{code:'404',…}}{code>,就可以了,但我没有可用的类型。这就是为什么我需要以某种方式将映射/记录转换为这种联合类型。

我找到了正确的方法

我可以将
{[code]:Response}
对象映射到
{[code]:{code:code,body:Response}
对象上,并通过
T[keyof T]
获取该对象的值,从而得到我需要的确切类型

type ResponseCodeBodyPairMap={
[Code in keyof M]:{Code:Code,body:M[Code]}
}
类型值=T[keyof T]
类型ResponseCodeBodyPair=值

太有创意了!