如何处理Flow中的混合类型和精确类型?

时间:2019-01-08 16:58:31

标签: javascript flowtype

我是Flow的新手。我的问题是如何处理类型不兼容:我有一个带有下划线样式属性的对象,并且我想编译一个具有相同值但驼峰式样式属性的新对象。我有一个changeCaseStyle函数。它应该可重用,这样我就可以在那里传递任何对象并对其进行转换:

/* @flow */
type ObjUnderscoreType = {
  str_property: string,
  num_property: number
};

type ObjCamelCaseType = {
  strProperty: string,
  numProperty: number
}

const objUnderscore = { str_property: 'foo', num_property: 2 };

function changeCaseStyle(obj: {[string]: mixed}): {[string]: mixed} | null {
  if (obj === null || obj === undefined) return null;
  if (typeof obj === 'object') {
    const resultObj = {};
    for (let key in obj) {
        // some dummy case transforming logic here...
      switch (key) {
        case 'str_property':
          resultObj.strProperty = obj[key];
          break;
        case 'num_property':
          resultObj.numProperty = obj[key];
          break;
        default: resultObj[key] = obj[key];
      }
    }
    return resultObj;
  }
  return null;
}

const objCamelCase: ObjCamelCaseType | null = changeCaseStyle(objUnderscore);

结果是我收到此警告:

  

由于混合,无法将changeCaseStyle(...)分配给objCamelCase   [1]与属性numProperty中的数字[2]不兼容

0 个答案:

没有答案