流程:解构。在React / Preact

时间:2017-04-10 16:19:57

标签: reactjs flowtype static-typing preact

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

即。

render({ count }, { displayHelp }) {

引发错误,如

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

当我添加注释时,它仍会抱怨

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

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

3 个答案:

答案 0 :(得分:7)

执行{ count: number }的问题是,这与destructuring assignment的ES6语法发生冲突,您可以使用{ a: b } = ca获取值c {1}}并将其命名为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访问所有道具。

答案 1 :(得分:2)

你需要做这样的事情:

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

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

答案 2 :(得分:1)

这对我有用

type Props = {
    counter?: number
};

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