Может ли Flow распознавать необъявленные реквизиты React? - PullRequest
0 голосов
/ 12 июня 2018

Flow обеспечивает передачу необходимых реквизитов в React Components, но, похоже, он не перехватывает ошибки при отправке дополнительных реквизитов.Это допускает тонкие ошибки, которые я иногда делаю, когда я набираю неверную версию проп.В приведенном ниже примере я передаю реквизит isloggedin, а не реальный реквизит isLoggedIn, но не выдается никакой ошибки, потому что у меня есть значение по умолчанию для isLoggedIn.Есть ли способ заставить Flow распознавать случаи, когда вы переходите в подпорку, которая не объявлена ​​в компоненте?

Код компонента:

// @flow

import React, { Component } from "react";

type Props = {
    isLoggedIn: boolean
};

class Donkey extends Component<Props> {
  static defaultProps = {
    isLoggedIn: false,
  }

  render() {
    return (
      <div> {this.props.isLoggedIn.toString()} </div>
    )
  }
}

export default Donkey;

Код вызова:

// @flow

import React, { Component } from "react";
import Donkey from "./Donkey";

type Props = {

}

class Main extends Component<Props> {
  render() {
    return (
      <Donkey isloggedin={true} />
    )
  }
}

export default Main;

Расход:

> flow
No errors!

1 Ответ

0 голосов
/ 12 июня 2018

Вы можете принудительно установить точное соответствие типов, используя {| ... |} (см. https://flow.org/en/docs/types/objects/#toc-exact-object-types).

. Затем Flow сообщит о любых отсутствующих или дополнительных свойствах.

Почему мы нигде не используем это?потому что во многих ситуациях нам не важно, есть ли какие-то дополнительные свойства. Это может произойти для объектов, поступающих из JSON API или даже для ваших собственных компонентов, когда компонент просто передает некоторые свойства своим дочерним элементам (например, className).

...