2017-11-30 17 views
0

TypeScriptでコンパイルするReact.createElementを取得できません。TypeScript/JSXのReact.createElementの正しい構文

interface IColorPickerProps { 

} 

interface IColorPickerState { 

} 

class ColorPicker extends React.Component<IColorPickerProps, IColorPickerState> { 
    constructor(props: IColorPickerProps) { 
     super(props); 
    } 
} 

コンポーネントの作成:

let props: any = {} 
React.createElement(ColorPicker, props) 

私はこのコンパイルエラーを取得する:私は、コンストラクタを削除した場合

Argument of type 'typeof ColorPicker' is not assignable to parameter of type 'string | ComponentClass<IColorPickerProps> | StatelessComponent<IColorPickerProps>'. 
    Type 'typeof ColorPicker' is not assignable to type 'StatelessComponent<IColorPickerProps>'. 
    Type 'typeof ColorPicker' provides no match for the signature '(props: IColorPickerProps & { children?: ReactNode; }, context?: any): ReactElement<any> | null'. 

、エラーが表示されなくなります。私は小道具が動的に渡される必要があるので、構文を使用することはできません。何か案は?

+0

'React.createElement(ColorPicker、props)'なぜ ' 'だけでいいのですか? –

+0

Propsは、ColorPickerを作成するクラスのパラメータとして動的に渡されるためです。 '' React.createElement(ColorPicker、props) 'はコンパイル時間のチェックを失います。 – sixtstorm1

答えて

0

Reactの最新バージョンとタイプ定義の最新バージョンにアップグレードすることで問題を解決しましたが、これはおそらく使用していたタイプ定義の問題でした。すべてあなたの助けをありがとう

1

私がfilename.tsxを実行した後、ノードfilename.jsを実行すると、コンパイルしたコードがうまくコンパイルされています。これと一緒に持っている他のコードはありますか?

クラスの小道具を入力する際のポイントは、ColorPickerクラスに渡される内容が分かります。私の意見では、IColorPickerPropsインターフェイスを修正して、このように渡す小道具を含めることが最善の方法です。

interface IColorPickerProps { 
    name: string, 
    age: number 
} 

そして

let myprops: IColorPickerProps = { 
    name: ... 
    age: ... 
} 

あなたは、あなたはソートの型チェックの目的を破っている、いずれかとして、あなたの小道具を入力している場合。

+0

あなたは正しいです、それはコンパイルします。私はVSコードを使用していて、生きているTypeScriptのチェックでエラーが出ますが、うまくコンパイルされます。どんな考え?型チェックに関しては、これは、どのプロップが受信されているかを知らない特別なファクトリクラスであり、小道具を動的に渡す必要があります。 – sixtstorm1

+0

私は、小道具が受け取られていることをあなたが意味するものにちょっと混乱しています。送信されている小道具の数が異なるか、毎回小道具が異なるのですか? – becks