2016-05-28 5 views
0

JSXとTypescriptの統合に関する質問があります。次のコードを考える:ReactTypeをJSXで使用

interface Props { 
    component?: React.ReactType 
} 

class MyComponent extends React.Component<Props, void> { 
    render() { 
     var Comp = this.props.component 
     return (<Comp></Comp>) 
    } 
} 

私が手:JSX element type 'Comp' does not have any construct or call signatures.

がどのように私はこの問題を解決するのですか?同様のコードは、componentelementType小道具react-prop-typesの小冊子バリデータがあるので、文字列かコンポーネントクラスのどちらでもかまいません。

答えて

0

入力タイプの反応タイプの定義を見てみると、3つの異なるタイプの和集合タイプがあり、そのうちの1つが文字列であることがわかります。だから、あなたはそのような問題を抱えていたのです。 React.ReactTypeをReact.ComponentClassに置き換えてみてください。

+0

しかし、私も文字列が欲しい、それは反応javascriptで許可されています。 – user3250645

+0

@ user3250645あなたはtypescriptを使用しないでください。あなたが入力することができない多くの正しいプログラムがあります。それはトレードオフですが、表現の自由を失っても安全性は増します。 –

+0

問題は言語としてのtypescriptとは関係ありません。明らかに、そのタイプシステムは、必要なもの(すなわち、ReactType)を表現するのに十分柔軟である。問題は、JSX.ElementクラスのJSXパーサーでJSX.Elementクラスが必要であることと、ReactType(単純な文字列を意味する)とJSX.Element(React.Componentが必要)がどのように橋渡しをしているかわかりません。私はそれが可能であると確信しています。 – user3250645

0

渡しているコンポーネントをどのように作成していますか?あなたはそれが動作するはずです。このようにそれを作成した場合:

interface MyProps { 
    component?: React.ReactType; 
} 

class TestComponent extends React.Component<void, void> { 
    render() { 
     return <div>Test</div>; 
    } 
} 

class MyComponent extends React.Component<MyProps, void> { 
    render() { 
     const Comp = this.props.component 
     return (<Comp/>); 
    } 
} 


class Parent extends React.Component<{}, {}> { 
    render() { 
     return (
      <MyComponent component={TestComponent}></MyComponent> 
     ) 
    } 
} 

また、文字列として、html要素(例えば「DIV」)を渡すことができますが、私はそれはあなたがやりたいことだかはわかりません。

関連する問題