【问题标题】:Flow union in object values not working as expected对象值中的流联合未按预期工作
【发布时间】:2015-06-22 00:12:32
【问题描述】:

我有以下代码。出于某种原因,Flow 拒绝了它。

class A {}
class B {}

type Intersection = (A | B);

var myMap: {
    a: A;
    b: B;
} = {
    a: new A(),
    b: new B()
}

var getter = function (name: string): () => Intersection {
    return function (): Intersection {
        return myMap[name];
    }
}

var bGetter: () => B = getter("b");

我发现代码中没有错误。然而,Flow 拒绝了它:

/srv/webwallet/app/scripts/angularHelper.js:14:22,22:A 这个类型是 与 /srv/webwallet/app/scripts/angularHelper.js:12:7,7 不兼容: 乙

发现 1 个错误

为什么代码不检查,如何检查?

【问题讨论】:

    标签: javascript flowtype


    【解决方案1】:

    你需要改变

    type Intersection = (A | B);

    type Intersection = (A & B);

    “|”运算符是一个不相交的联合。

    【讨论】:

    • 我不明白为什么交集& 是正确答案。 “交集类型要求值是所有输入类型。”在这种情况下,bGetter 最终属于B 而不是A,因此它不符合定义。出于某种原因,函数原型似乎特别需要& 表示“或”。我错过了什么?
    猜你喜欢
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 2016-08-31
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多