Объяснить вопросительный знак (?) используется в коде ES6/JSX

Я использую библиотеку под названием react-forms в моем приложении React. Чтобы лучше понять, как это работает, я читал код, но конвенция продолжает появляться, что смущает меня. Вот код ES6 / JSX:

'use strict';

var React = require('react/addons');
var cx = React.addons.classSet;

var Checkbox = React.createClass({

  propTypes: {
/...code.../
  },

  render(): ?ReactElement {
    /...code.../
  },

  onChange(e: {target: {checked: boolean}}) {
    /...code.../
  }
});

module.exports = Checkbox;

Примечание render(): ?ReactElement {}. Вот это меня и смущает. Может ли кто-нибудь предложить руководство о том, где узнать больше об этом синтаксисе? Я попал в много тупиков через Google.

1 ответов


если вы идете в упаковке.json из react-forms, и посмотрите на раздел browserify:

  "browserify": {
    "transform": [
      [
        "reactify",
        {
          "es6": true,
          "target": "es5",
          "stripTypes": true
        }
      ]
    ]
  },

это. Он удаляет такие вещи, как ?ReactElement, что означает может быть возвращает ReactElement (и в противном случае null или undefined)

на {target: {checked: boolean}} означает e имеет свойство target, которое имеет свойство checked, которое является логическим.

это подсказки для проверка типа потока. Вы также увидите @flow в a комментарий в верхней части всех файлов, которые должны быть проверены типа. Type checker - это инструментальные модульные тесты – которые делают вас более уверенными в правильности вашей программы, что не требует ручного тестирования. Во многих случаях эти небольшие аннотации типа заменяют модульные тесты, которые мы бы иначе написали.

если вы используете flow в своем проекте и пытаетесь сделать что-то вроде:

<Checkbox />

это даст вам ошибку типа, потому что value и onChange являются необходимыми реквизитами. В отличие от проверка реквизита времени выполнения, это происходит без фактического запуска кода (часто, как только вы сохраняете файл).