我从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}}
答案 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
因此,string
是number | string
的子类型,Array<string>
不是Array<number | string>