我正在尝试解决为什么Flow在这里出错:
// @flow
import { Map } from 'immutable';
type Filemap = Map<string, Buffer>;
type FilemapCompatibleObject = Filemap | { [string]: Buffer };
export const castFilemap = (object: FilemapCompatibleObject): Filemap => {
// checking with instanceof works fine
if (object instanceof Map) {
return object;
}
// checking with isMap does not
if (Map.isMap(object)) {
return object;
// ^^^ FLOW ERROR: object type This type is incompatible with the expected return type of Map
}
return Map(object);
};
检查Map.isMap(object)
后,我知道对象是Map,但Flow不是。为什么不?有什么方法可以'告知'Flow它现在是一张地图吗?
可能的子问题:使用Map.isMap(obj)
而不是obj instanceof Map
是否有任何优势? (如果不是,为什么他们提供静态方法?)
编辑:看Immutable's own typedef它似乎有一些有趣的%checks
语法来解决我遇到的问题,但它似乎对我不起作用。而且我找不到文档。
declare function isMap(maybeMap: mixed): boolean %checks(maybeMap instanceof Map);
答案 0 :(得分:1)