5

刚刚开始使用 Flow 但似乎无法理解它想让我做什么来添加类型来解构对象,例如道具

IE

render({ count }, { displayHelp }) {

抛出一个错误,如

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

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

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

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

4

3 回答 3

7

这样做的问题{ count: number }是,这与解构赋值的 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.

于 2017-04-10T16:28:56.420 回答
2

你需要做这样的事情:

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

不幸的是,我不相信有更简洁的方法可以做到这一点。

于 2017-04-10T16:29:59.913 回答
2

这对我有用

type Props = {
    counter?: number
};

const Component = ({counter}: Props) => (
    <div className="App">
        {counter}
    </div>
);
于 2018-08-15T02:31:00.640 回答