这是我尝试使用泛型注释时遇到的Flow错误的简化示例:
// @flow
function component<T>(state: T) {
let model = deepFreeze(state);
// ^ Cannot call `deepFreeze` with `state` bound to `o`
// because `T` [1] is incompatible with object type [2].
return {
update: (state: T) => {
// etc.
}
};
}
function deepFreeze(o: Object) {
Object.freeze(o);
// etc.
return o;
}
在我看来<T>
应该简单地跟踪类型,无论它是什么。
在此示例中,我使用了我能找到的最不具体的类型,文档对此进行了说明:“如果您需要选择退出类型检查器,并且不想一直使用任何类型,您可以改为使用对象”。
那么当不可避免地以其他更特定的方式使用多态类型时,如何使用多态类型呢?
答案 0 :(得分:0)
缩小通用类型可消除错误:
switch
从docs:
... 泛型具有“未知”类型。您不得将泛型当作特定类型使用。
您可以在通用类型中添加类型...这样,您可以在仅允许使用某些特定类型的情况下保持通用类型的行为。