【发布时间】:2019-07-22 21:55:13
【问题描述】:
在使用流类型时,我认为应该可以将没有特定参数的类型的对象分配给具有可选参数的类型的变量。事实并非如此。
请看下面的代码...
// @flow
type T1 = {
+a: string,
+b? : number,
};
type T2 = {
+a: string,
}
const t2: T2 = {
a: "Hello",
};
const v1 : T1 = t2; // ERROR!!! (Why???)
const v2 : T1 = { // THIS WORKS
...t2
};
既然在 T1 中,'b' 属性是可选的,为什么 Flow 会阻止我分配另一个类型,其中 'b' 被简单地省略了?这种限制似乎没有必要且无益。
有没有人了解这种行为背后的基本原理,或者可以指出一些解释它的文档。我已经阅读了 Flow Objects 部分,但没有发现任何内容:https://flow.org/en/docs/types/objects/
【问题讨论】:
-
Flow 将抛出错误“无法将
t2分配给v1,因为T2[1] 中缺少属性b,但T1[2] 中存在。”这是正常和正确的。b是T1类型的可选属性,但T1类型不同于T2类型。嗯看看flow.org/try/…
标签: javascript flowtype