流:解构。 React/Preact 中缺少注释

Flow : destructuring. Missing annotation in React/Preact

刚开始使用 Flow,但似乎无法理解它要我为解构对象(例如 props)添加类型做什么

render({ count }, { displayHelp }) {

抛出类似

的错误
 16:   render({ count }, { displayHelp }) {
              ^^^^^^^^^ destructuring. Missing annotation

当我添加注释时它仍然抱怨

 17:   render({ count: number }, { displayHelp }) {
              ^^^^^^^^^^^^^^^^^ destructuring. Missing annotation

如果有人能指出,我显然在这里遗漏了一些非常简单的东西?

执行 { count: number } 的问题是这与 destructuring assignment 的 ES6 语法冲突,您可以在其中使用 { a: b } = c 以使用键 a 获取值来自 c 并将其命名为 b,即:

const c = { a: 1 }
const { a: b } = c
//b is now a constant with value 1

目前在 Flow 中还没有很好的解决方法,但这似乎有效(虽然它很丑):

render({...}: { count: number }, { displayHelp }) {

现在最好的方法似乎是创建一个自定义 type 来捕获您的道具:

type propsForThisComponent = {
  propA: someType
  propB: anotherType
  ...
}

然后做:

render(props: propsForThisComponent) {

这会进行类型检查,尽管它会强制您以 props.propName.

的形式访问所有道具

你需要做这样的事情:

render({count}: {count: number}, {displayHelp}: {displayHelp: boolean}) { ...

不幸的是,我认为没有更简洁的方法来做到这一点。

这对我有用

type Props = {
    counter?: number
};

const Component = ({counter}: Props) => (
    <div className="App">
        {counter}
    </div>
);