我尝试了您的示例并得到了No errors!
,因为 Flow 不需要对私有函数进行类型注释。
如果相反,我添加了export
这样的:
// @flow
export const StationDetail = ({ station }) => {
const {
code,
label,
} = station;
return code + label;
};
我收到以下错误。(我认为这与您所看到的足够接近。)
Error: 41443242.js:2
2: export const StationDetail = ({ station }) => {
^^^^^^^^^^^ destructuring. Missing annotation
Found 1 error
你至少可以通过两种方式解决这个问题。更好的方法是为函数参数添加类型注释。例如:
export const StationDetail =
({ station }: { station: { code: number, label: string } }) =>
或者
export const StationDetail =
({ station }: {| station: {| code: string, label: string |} |}) =>
甚至
type Code = 1 | 2 | 3 | 4 | 5 | 6;
type Radio ={|
station: {| code: Code, label: string |},
signalStrength: number,
volume: number,
isMuted: bool,
|};
export const StationDetail = ({ station }: Radio) =>
...
如果您想确保StationDetail
始终使用适当的 Radio 对象调用 ,即使当前实现只查看该station
字段。
另一种选择是将第一个注释更改为// @flow weak
并让 Flow 自行推断参数类型。这就是 Less Good™,因为它更容易意外更改您的公共 API,并使您的实际意图不那么明确。