🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

3回答

7763閲覧

reactをtypescriptで書きたい

cuku

総合スコア108

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2019/11/22 07:13

編集2019/11/22 07:52

react

1import React from 'react'; 2import logo from './logo.svg'; 3import './App.css'; 4import Title from './components/Title'; 5 6class App extends Component { 7 8 //Event handlerやstateを定義する場所 → OK 9 onClickHandler = () => { 10 let title = document.getElementById('versionCounter'); 11 let upgradeButton = document.getElementById('upgradeButton'); 12 upgradeButton.style.display = "none"; 13} 14 15//render()メソッド → OK 16render() { 17 18 //return → OK 19 return ( 20 <div className="App"> 21 <header className="App-header"> 22 <Title 23 title="Hello World 3.0" 24 titleStyle={{color: 'orange'}} 25 onClick={this.onClickHandler} 26 > 27 Hello World <span id="versionCounter" style={{borderBottom: '1px solid orange'}}>3.0</span> 28 </Title> 29 </header> 30 </div> 31 ); 32} 33} 34export default App;

上記のコードをtypescriptに直したいのですがどこを直したらいいのでしょうか?

./src/index.tsx
Attempted import error: './App' does not contain a default export (imported as 'App').
Cannot find name 'Component'. TS2304
というエラーが出ています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nerianighthawk

2019/11/22 07:22

修正でいいので、どういったエラーが出るのか書いていただけると助かります。
Udomomo

2019/11/22 07:22

質問が途中で切れてしまっているようです。
cuku

2019/11/22 07:27

追記しました
cuku

2019/11/22 07:32

class App extends Component{ のCommentに赤線がついててCannot find name 'Component'.と表示されています
guest

回答3

0

ベストアンサー

エラー内容は単純に default export していないだけのようです。

ただ、こういったフロント系フレームワークを使う利点として HTML 上の値を通常の変数で定義することができるというのが上げられると思うのですが、document.getElementById を使うと HTML 上から値を引っ張って来ており、フロント系フレームワークを使う利点が潰れてしまっています。

TypeScript もぜひ使ってほしいところではありますが、まずは React を使う利点から勉強をして、React の便利な機能を使うことから始め、ステップアップしていった方が良いかもしれません。

投稿2019/11/22 07:34

nerianighthawk

総合スコア544

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cuku

2019/11/22 07:40

ありがとうございます。 Cannot find name 'Component'. TS2304のエラーはわかりますでしょうか?
nerianighthawk

2019/11/22 07:47

すみません、わかりません。 私の環境で同じコードを書いてみましたが、その部分でエラーは起きませんでした。 あとは環境によって違う部分、パッケージ等の可能性がありますかね。 一度プロジェクト直下で npm install を実行してみてはいかがでしょうか?(React がインポート出来ているので、この線も薄いですが)
cuku

2019/11/22 07:53

治らなかったです。すいません。コードが少し違ったかもしれません。 修正して貼り直しました。
nerianighthawk

2019/11/22 07:56

はい、そのコードでしたら、`Component` がインポートされていないため、インポートする必要があります。 インポート文を ``` import React, { Component } from 'react'; ``` と書くか、`Component` と書いてある部分を `React.Component` とするかですね。
cuku

2019/11/22 08:38

先ほどのonClickが調べても解決できません。 App.tsxに <Title title="Hello World 3.0" titleStyle={{color: 'orange'}} onClick={this.onClickHandler} > Hello World <span id="versionCounter" style={{borderBottom: '1px solid orange'}}>3.0</span> </Title> のTitleで Type '{ children: (string | Element)[]; title: string; titleStyle: { color: string; }; onClick: () => void; }' is not assignable to type 'IntrinsicAttributes & Props & { children?: ReactNode; }'. Property 'titleStyle' does not exist on type 'IntrinsicAttributes & Props & { children?: ReactNode; }'.ts(2322のエラーが出ます
nerianighthawk

2019/11/22 08:46

今度は onClick の問題ではないですね。 <Title> と </Title> で挟まれた中身があると、Title コンポーネントには children という props として落ちます。 しかし、先ほどの Props の型には children というものを用意していませんでした。 そのためエラーになっています。 また、titleStyle も Props に書いていないので、書く必要があります。 こういった形で、Props にはすべての情報を書く必要があります。
cuku

2019/11/22 08:53

titleStyleはなんの型になるのでしょうか? 型一覧とかそういうものはあったりしますか?
nerianighthawk

2019/11/22 09:17

titleStyle は {color: string} という型ですね。 型は基本は文字列(string)、数字(number)、論理値(boolean)で、後はReactやパッケージで用意された型だったり、自分で定義した型(Propsや{color: string}がそう)です。 Reactやパッケージで用意された型に関してはエラー文に書いてあるので、その通り指定してあげればできるかと思います(今回だと Element 等書いているので、それが指定できます)。 また、| で or にしたり、& で and 表記も出来ます。
cuku

2019/11/22 09:35

エラー内容でchildrenの型はType '{ props: PropsWithChildren<Props>; (Missing): any; }' とあるんですけどどう書いたらいいんでしょうか?
guest

0

こんにちは。
ご質問に挙げられている class App の記載された、 App.js というファイルの最後に、以下の一行を追加してみると、いかがでしょうか?

javascript

1export default App;

追記

Cannot find name 'Component'. TS2304 のほうの対策を一点挙げます。
これでうまくいくか分かりませんが、TypeScript の設定ファイル、tsconfig.json
"typeRoots": [ "./node_modules/@types" ]
があるかを確認して、無ければこれを、以下の位置に追加してみると、いかがでしょうか?

json

1{ 2 "compilerOptions": { 3 ・・・ 4 "typeRoots": [ "./node_modules/@types" ] 5 } 6} 

追記2

蛇足ですが、TypeScriptによるReactアプリ開発を手っ取り早く始めたい場合、以下のコマンド

npx creact-react-app myapp --typescript

によって、creact-react-app を --typescript オプションを与えて起動し、アプリのひな形 myapp を作ることもできます。これによって自動的に作られる App は、はじめからtypescriptで書かれています。

投稿2019/11/22 07:34

編集2019/11/22 08:32
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cuku

2019/11/22 07:36

ありがとうございます。 Cannot find name 'Component'. TS2304のエラーはわかりますでしょうか?
jun68ykt

2019/11/22 08:04

TS2304のエラー対策を回答に追記しました。
cuku

2019/11/22 08:58 編集

--typescriptでmyappt作りました。 それでreaactの演習みたいなのをやっていてエラーになって今回質問した感じです
jun68ykt

2019/11/22 09:23

なるほど。そういう経緯のご質問だったのですね。
guest

0

Attempted import error: './App' does not contain a default export (imported as 'App').

エラーメッセージのとおりです。このファイルから何もexportしていないので、importに失敗しています。

おそらく、export default App(後略)のようにするのが適当かと思います。

投稿2019/11/22 07:32

maisumakun

総合スコア145977

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cuku

2019/11/22 07:34

ありがあとうございます。 Cannot find name 'Component'. TS2304のエラーはわかりますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問