13
11

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 5 years have passed since last update.

TypeScript & Stateless Component でchildrenプロパティを扱う

Last updated at Posted at 2016-11-06

目的

TypeScript + React + JSXを利用している開発環境で
Stateless Component(React.Componentを継承しないコンポーネント)内で
childrenプロパティを利用する

問題

以下のソースでchildrenプロパティを利用しようとするとエラーが発生する。

import React from 'react';

// Stateless Component
const MyStatelessComponent = ({ children }) => <div>{children}</div>; // (1)

// 親コンポーネント
class MyApp extends React.Component<{}, {}> {
  render() {
    return (
      <MyStatelessComponent>   //
        Learn Javascript       // (2)
      </MyStatelessComponent>  //
    )
  }
}

エラー内容は次の通り

Error TS2324: Property 'children' is missing in type 'IntrinsicAttributes

MyStatelessComponentにchildrenプロパティを設定する必要があるよう。
しかし、今回は通常のReact.Componentを継承したコンポーネントと同様に
(2)の方法で記述を行いたい。

エラー回避策

(1)の部分で、childrenのデフォルト値を設定する

const MyStatelessComponent = ({children = null}) => <div>{children}</div>;

上記のようにすることでエラーは発生しなくなった。

  • 2016/11/14 追記

いただいたコメントにより、

const MyStatelessComponent: React.StatelessComponent<React.Props<{}>>
    = ({ children }) => <div>{ children }</div>

と、Reactが提供するStatelessComponentインタフェースを実装することで、問題が解決できることがわかりました。
children以外のプロパティを追加する場合は、React.Propsを継承したクラスを作ることで対応できます。
ご指摘ありがとうございました。

参考

13
11
3

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
13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?