"子类型"与联合类型不兼容

时间:2016-12-02 14:23:25

标签: javascript types flowtype

我从the Flow docs偷了一些JSON类型。

我将一个字符串数组(带注释的Promise<JSON>)输入到一个输出带有一些JSON的promise的函数 - 带注释的JSON。但是,Array<string>类型似乎与JSON不兼容。

据我了解,上述内容应该兼容,因为JSONArray可以是Array<JSON> JSON,其中string可以是// @flow type JSON = string | number | boolean | null | JSONObject | JSONArray type JSONObject = { [key: string]: JSON } type JSONArray = Array<JSON> const stringArrayWithArrayAnnotation : Array<string> = ["foo"] // Line below throws: // array type // This type is incompatible with // union: string | number | boolean | null | JSONObject | JSONArray` const stringArrayWithJSONAnnotation : JSON = stringArrayWithArrayAnnotation 。< / p>

我做了一个比我的代码更简单的例子,最后一行抛出了同样的错误。您可以在行动here

中看到它
{{1}}

1 个答案:

答案 0 :(得分:3)

Array类型为不变docs: Array elements

type A = Array<number | string>;
declare var x: Array<string>;
const y: A = x // => error: number. This type is incompatible with string

因此,stringnumber | string的子类型,Array<string> Array<number | string>

的子类型