2016-03-18 5 views
8

TypeScriptで子どものタイプを設定できますか?例えばTypescript:React Componentで子どものタイプを設定するには?

私は、このようなコンポーネント

class UserProfile extends React.Component<{ id: number }, void>{ 
} 

class Thumbnail extends React.Component<{ children: UserProfile[] }, void>{ 

} 

class UsersList extends React.Component<void, void>{ 

    public render() { 
     return (
      <div> 
       <Thumbnail><UserProfile id={1} /></Thumbnail> 
       <Thumbnail><UserProfile id={2} /></Thumbnail> 
      </div> 
     ) 
    } 
} 

を持っている私は、このような事態を避けるために、サムネイルのコンポーネントでサポートされている特定のものを子供定義したい:

class UsersList extends React.Component<void, void>{ 

    public render() { 
     return (
      <div> 
       <Thumbnail><UserProfile id={1} /></Thumbnail> 
       <Thumbnail><UserProfile id={2} /></Thumbnail> 
       <Thumbnail><span>Some plain text</span></Thumbnail> // This should be forbidden because Thumbnail component expects to have an array of UserProfile elements as it can handle them 
      </div> 
     ) 
    } 
} 

この例では動作しません、それを行う方法はありますか?

+1

私はこれを行う方法を探していましたが、私はできないと思います。 JSXは、コンポーネントクラスの型ではなく、要素を出力します。あなたができることは、レンダリング関数の 'children'を検査し、' type'をチェックし、あなたが望むものでないならばエラーを投げることです。私はこの方法を見つけたが、それは奇妙に見える – Aaron

答えて

3

子どものタイプは反応成分ですか?

タイプアノテーション(そのすべてのJSX.Element)で絞り込むことはできません。実行時イントロスペクション(各子のtypeのプロパティ)で実行できます。

+0

: ' プライベート静的propTypesの= { 子供:React.PropTypes.oneOfType([ React.PropTypes.arrayOf(React.PropTypes.shape({タイプ:React.PropTypesを。 React.PropTypes.shape({type:React.PropTypes.oneOf([Cell])}) ] } ' – aspirisen

関連する問題