2016-12-30 7 views
0

JSXでコード化された既存のReactコンポーネントがあり、現時点ではTypescriptに変換できません。私はTypescriptで書かれている新しいReactアプリケーションでそれを利用したいと思います。 TSXコード内でJSXコードをインポートして使用できるかどうかはわかりません。これは可能ですか?どうすればいいのですか?以下JSXで定義された既存のReactコンポーネントをTypescriptモジュール(.tsx)でインポートする方法

おかげ

の例は、エラーを与える:TS2604:JSX element type 'OldCode' does not have any construct or call signatures.あなたのimport文変更しようと

OldCode.jsx

import React from 'react' 

export default React.createClass({ 
    render() { 
    return <div>OldCode</div> 
    } 
}) 

NewCode.tsx

import * as React from 'react'; 
import { OldCode } from './OldCode'; 

export default class NewCode extends React.Component<any, any> { 
    render() { 
    return (
     <OldCode/> 
    ); 
    } 
} 
+0

私はこのプロジェクトでTypescriptを使用することを断念し、なぜ@ djwwwwwの答えが私にとってうまくいかなかったのかを追跡しませんでした。私の本能はそれが正しいと言いますが、私が確認できなかったので、私はそれが受け入れられたとマークしませんでした。 – Jobu

答えて

0

import OldCode from './OldCode'; 

webpackを使用している場合は、リゾルバにも.jsxを追加する必要があります。

+0

ありがとうございましたが、インポート構文を変更しても結果は変わりません。私はwebpackのリゾルバで.jsxを持っていますが、それはここから下流です。最初にtsxをコンパイルできるようにするにはtscが必要です。 – Jobu

0
declare module '*.jsx' { 
    var _: React.Component<any, any>; 
    export default _; 
} 

、それがtsconfig.jsonに含まれていることを確認し、いくつかのファイルでこれを入れ

import OldCode from './OldCode.jsx'; 

のようにそれを使用しています。

もちろん、webpackがそれらをすべてパックしていることを確認してください。

+0

これは正しいトラックのように聞こえるが、私はそれを試しても同じエラーが発生する。おそらく私は命令を誤解したでしょうか?最初のブロックを保持し、 'jsx_compat.tsx'をmy tsconfig.jsonに追加したOldCode.jsxと同じディレクトリに新しいファイル' jsx_compat.tsx'を作成しました。 – Jobu

+0

申し訳ありませんが、上記のコメントを編集することはできません。 これは正しいトラックのように聞こえますが、試しても同じエラーが発生します。おそらく私は命令を誤解したでしょうか?最初のブロックを保持し、 'jsx_compat.tsx'をmy tsconfig.jsonに追加したOldCode.jsxと同じディレクトリに新しいファイル' jsx_compat.tsx'を作成しました。私はまた、一致するように私のインポートステートメントを変更しました。 これ以上の提案はありますか? webpackがそれらをすべてパックしていることを覚えていますが、今は 'tsc'の呼び出しに失敗しています。 – Jobu

+0

@Jobuここでは、ts以外のモジュール、https://github.com/webgl-component/coreをインポートする方法の例を示します。 'tsc'はどのようなエラーを生成しましたか? –

関連する問題