目的
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
を継承したクラスを作ることで対応できます。
ご指摘ありがとうございました。