如何将混合类型转换为对象类型

时间:2016-12-16 22:34:34

标签: express flowtype

当我读取未知变量时,例如:req.bodyJSON.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有关,但要弄明白......

1 个答案:

答案 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
      });
    }
  }); 
}

我想,从技术上讲,这是正确的 - 你正在提炼每一个价值,只是把你所知道的真实。

这是处理这类案件的适当方式吗?