yno*_*tu. 1 javascript flow-js
以下(简化)代码
type Category = {
id: string,
name: string,
};
type Option = {
id: string,
name: string,
isSelected: boolean,
};
const options = categories.map((c: Category): Option => ({
isSelected: true,
...c,
}));
Run Code Online (Sandbox Code Playgroud)
产生错误:
Flow:无法传播对象文字,因为 Flow 无法确定对象文字 [1] 的类型。
Category[2] 是不准确的,因此它可能包含isSelected与isSelected对象字面量 [1] 中的定义冲突的类型。尝试使Category[2] 精确。
我错过了什么?
您的类别类型不准确,这意味着它可能包含未在您的类型中定义的属性。出现错误是因为如果 c 包含一个名为 的属性isSelected,它可能会导致 Option 对象没有该属性的布尔值。
有两种可能的修复方法:
const options = categories.map((c: Category): Option => ({
...c,
isSelected: true,
}));
Run Code Online (Sandbox Code Playgroud)
这将导致isSelected: true始终优先于c.isSelected它是否曾经存在过。
第二个修复是使 Category 精确。
type Category = {|
id: string,
name: string,
|};
Run Code Online (Sandbox Code Playgroud)
这样做将禁止它具有额外的属性。您应该尽可能使您的对象准确无误。
有关更多信息,您可以阅读https://flow.org/en/docs/types/objects/#toc-exact-object-types
| 归档时间: |
|
| 查看次数: |
1077 次 |
| 最近记录: |