1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【React】TypeScript を使用しているのに PropTypes での型定義は必要か?

Last updated at Posted at 2021-02-24

結論

TypeScript での props の型定義も、PropTypes での型定義も、どちらも設定した方が吉です。

Typescript と PropTypes の違い

  • TypeScript:コードを書いているときに役立ちます。
    • TypeScriptの場合は、エディタでコードを書いているときに型チェックしてメッセージを出してくれますが、
      buildした後は型チェックをしてくれません(例.DevTools の Console でのエラーメッセージの出力は無し)。
  • PropTypes:たとえばAPIからJSONをロードする場合に役立ちます。
    • PropTypesの場合は、buildした後にも DevTools の Console 等でエラーメッセージを出力してくれます。

検証してみた

※サンプルコードの内容は適度に省略してあります。

header.tsx
import React from "react"
import PropTypes from "prop-types"
.
.
type Props = {
  siteTitle: string
} & typeof defaultProps;

const defaultProps = {
  siteTitle: `siteTitleが渡されなかった場合のデフォルトのタイトル`,
}
.
,
const Header: React.FC<Props> = ({ siteTitle }) => (
  <h1>{siteTitle}</h1>
)
.
.
// この propTypes を設定したりコメントアウトしたりして検証してみます。
Header.propTypes = {
  siteTitle: PropTypes.string.isRequired,
}
layout.tsx
import React from "react"
import PropTypes from "prop-types"
import Header from "./header"
.
.
// このsiteTitleは、本来ならstring型の値を渡さなければいけませんが、試しにnumber型の値を渡して意図的にエラーを吐いてくれるようにしてみます。
const Layout: React.FC = ({ children }) => (
  <Header siteTitle={155} />
)

PropTypes を定義した場合は、DevTools の Console で下記エラーメッセージを出力して怒ってくれますが、

index.js:2177 Warning: Failed prop type: Invalid prop siteTitle of type number supplied to Header, expected string.
in Header (at layout.tsx:28)
in Layout (at pages/index.tsx:9)
.
.

スクリーンショット 2021-02-25 1.52.05.png
スクリーンショット 2021-02-25 4.46.23.png

PropTypesを設定していない場合は、何も怒ってくれません。

スクリーンショット 2021-02-25 4.47.56.png

スクリーンショット 2021-02-25 1.53.05.png

よって、TypeScriptの使用の有無に関わらず、PropTypesも設定しておいた方が無難そうです。
(二重チェックになるので不必要である、と言うことは無さそうです。)

参考にさせていただいたURL

React+TypeScriptでPropTypesを使う

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?