【问题标题】:Flow javascript mixed type array cannot use array functionsFlow javascript混合类型数组不能使用数组函数
【发布时间】:2020-01-28 18:29:15
【问题描述】:

我正在使用流进行类型检查,我有以下功能。

function foo(x: Array<number> | Array<string>) {
  const s = x.map(i => i); 
}

我需要使用Array&lt;number&gt; | Array&lt;string&gt; 而不是Array&lt;number | string&gt;,因为某些代码会自动生成并且不受我控制,返回类型为Array&lt;number&gt; | Array&lt;string&gt;

显然,不管x 的实际类型如何,我“应该” 能够对其执行数组操作。但是我无法在 x 上使用 map 函数,并且收到以下错误:

Cannot instantiate array type because string [1] is incompatible with number [2].

我想知道解决此问题并能够执行数组操作而不会收到错误的正确方法是什么。

Link 到一个流小提琴。

【问题讨论】:

  • 听起来像是流程中的错误。似乎相信您的地图输出number | string。它应该能够分辨出来自x 的元素总是numberstring,这是在调用函数foo 时做出的选择,而不是在map 内。

标签: javascript types flowtype


【解决方案1】:

我认为在这种情况下你可以使用泛型

function foo<I: number | string>(x: Array<I>) {
    const s = x.map(i => i); 
}

Try it

【讨论】:

    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 2014-04-28
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    相关资源
    最近更新 更多