PropTypes в приложении для использования TypeScript

Использует ли React.PropTypes смысл в React.PropTypes на использование TypeScript или это всего лишь случай "пояса и подтяжки"?

Поскольку класс компонента объявлен с параметром типа Props:

interface Props {
    // ...
}
export class MyComponent extends React.Component<Props, any> { ... }

есть ли реальная польза для добавления

static propTypes {
    myProp: React.PropTypes.string
}

к определению класса?

Ответ 1

Как правило, поддержание обоих компонентов в качестве типов TypeScript и React.PropTypes одновременно React.PropTypes.

Вот несколько случаев, когда это полезно:

  • Публикация пакета, такого как библиотека компонентов, которая будет использоваться простым JavaScript.
  • Принятие и передача внешнего ввода, такого как результаты вызова API.
  • Использование данных из библиотеки, которые могут не иметь адекватной или точной типизации, если таковые имеются.

Итак, обычно это вопрос того, насколько вы можете доверять проверке времени компиляции.

Более новые версии TypeScript теперь могут выводить типы на основе ваших React.PropTypes (PropTypes.InferProps), но результирующие типы могут быть сложными в использовании или ссылаться на другие части вашего кода.

Ответ 2

Typescript и PropTypes служат для разных целей. Typescript проверяет типы во время компиляции, тогда как PropTypes проверяется во время выполнения.

Typescript полезен при написании кода: он предупредит вас, если вы передадите аргумент неправильного типа компонентам React, даст автозаполнение для вызовов функций и т.д.

PropTypes полезны при тестировании взаимодействия компонентов с внешними данными, например при загрузке JSON из API. PropTypes поможет вам отладить (в режиме разработки React) причину сбоя вашего компонента, напечатав такие полезные сообщения, как:

Warning: Failed prop type: Invalid prop 'id' of type 'number' supplied to 'Table', expected 'string'

Хотя может показаться, что Typescript и PropTypes делают одно и то же, на самом деле они вообще не перекрываются. Но можно автоматически генерировать PropTypes из Typescript, чтобы вам не приходилось указывать типы дважды, см., Например:

Ответ 3

Я предполагаю, что в некоторых беспорядочных ситуациях, когда тип реквизита не может быть выведен во время компиляции, было бы полезно увидеть любые предупреждения, созданные при использовании propTypes.

Кроме этого, я не вижу никакой пользы (я почему, почему я никогда не использовал ее лично).