当我读取未知变量时,例如:req.body
或JSON.parse()
并知道它以某种方式格式化,例如:
type MyDataType = {
key1: string,
key2: Array<SomeOtherComplexDataType>
};
我该如何转换它,以便以下工作:
function fn(x: MyDataType) {}
function (req, res) {
res.send(
fn(req.body)
);
}
一直没告诉我:
req.body is mixed. This type is incompatible with object type MyDataType
。
我认为这与Dynamic Type Tests有关,但要弄明白......
答案 0 :(得分:2)
我可以通过迭代身体并复制每个结果来实现这一点的一种方法,例如:
if (req.body &&
req.body.key1 && typeof req.body.key2 === "string" &&
req.body.key2 && Array.isArray(req.body.key2)
) {
const data: MyDataType = {
key1: req.body.key1,
key2: []
};
req.body.key2.forEach((value: mixed) => {
if (value !== null && typeof value === "object" &&
value.foo && typeof value.foo === "string" &&
value.bar && typeof value.bar === "string") {
data.key2.push({
foo: value.foo,
bar: value.bar
});
}
});
}
我想,从技术上讲,这是正确的 - 你正在提炼每一个价值,只是把你所知道的真实。
这是处理这类案件的适当方式吗?