質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

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

React.js

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

Q&A

1回答

2828閲覧

typescript+Reactで「Line 0: Parsing error: Cannot read property 'map' of undefined」

kobaryo04ysh

総合スコア29

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

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

React.js

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

0グッド

0クリップ

投稿2020/12/06 08:55

編集2020/12/07 04:18

ReactとJSを使って作成したアプリをts migrateを使って、TypeScriptに置き換えていたのですが、App.tsxというファイルで以下の様なエラーが発生しました。

Line 0: Parsing error: Cannot read property 'map' of undefined

以下はApp.tsxです。

import React, { useState, useEffect, useCallback} from 'react'; import './assets/styles/style.css'; import {AnswersList, Chats} from './components/index'; import FormDialog from './components/Forms/FormDialog'; import {db} from './firebase/index'; const App = () => { const [answers, setAnswers] = useState([]); const [chats, setChats] = useState([]); const [currentId, setCurrentId] = useState("init"); const [dataset, setDataset] = useState({}); const [open, setOpen] = useState(false); interface Dataset { "answers": Array<Answer>, "question": string } interface Answer { "answers": [ {"content": string, "nextId": string} ] } const displayNextQuestion = (nextQuestionId: string, nextDataset: Dataset) => { addChats({ text: nextDataset.question, type: 'question' }) setAnswers(nextDataset.answers) setCurrentId(nextQuestionId) } const selectAnswer = (selectedAnswer: any, nextQuestionId: any) => { switch(true) { case (nextQuestionId === 'contact'): handleClickOpen() break; case (/^https:*/.test(nextQuestionId)): const a = document.createElement('a'); a.href = nextQuestionId; a.target = '_blank'; a.click(); break; default: addChats({ text: selectedAnswer, type: 'answer' }) setTimeout(() => displayNextQuestion(nextQuestionId, dataset[nextQuestionId]), 500) break; } } const addChats = (chat: any) => { setChats((prevState) => { return [...prevChats, chat] }) } const handleClickOpen = () => { setOpen(true) }; const handleClose = useCallback(() => { setOpen(false) }, [setOpen]); useEffect(() => { (async() => { const initDataset = {}; await db.collection('questions').get().then(snapshots => { snapshots.forEach(doc => { const id = doc.id const data = doc.data() initDataset[id] = data }) }) setDataset(initDataset) displayNextQuestion(currentId, initDataset[currentId]) })() }, []) useEffect(() => { const scrollArea = document.getElementById('scroll-area') if (scrollArea) { scrollArea.scrollTop = scrollArea.scrollHeight } }) return( <section className="c-section"> <div className="c-box"> <Chats chats={chats} /> <AnswersList answers={answers} select={selectAnswer} /> <FormDialog open={open} handleClose={handleClose} /> </div> </section> ); } export default App;

以下はpackage.jsonです。

{ "name": "chatbot", "version": "0.1.0", "private": true, "dependencies": { "@material-ui/core": "^4.11.2", "@material-ui/icons": "^4.11.2", "@material-ui/system": "^4.11.2", "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.3.2", "@testing-library/user-event": "^7.1.2", "@typescript-eslint/eslint-plugin": "^4.9.0", "@typescript-eslint/parser": "^4.9.0", "firebase": "^7.24.0", "react": "^16.14.0", "react-dom": "^16.14.0", "react-scripts": "3.4.3" }, "resolutions": { "@typescript-eslint/eslint-plugin": "^4.1.1", "@typescript-eslint/parser": "^4.1.1" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": {}, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, "devDependencies": { "ts-migrate": "^0.1.10" } }

エラーについて調べていると、このページが見つかったので参考にしつつ試してみたのですが変わらず。。

ちなみに試したのは以下の通りです。

  • node_modulesファイルを削除して再度npm install
  • @typescript-eslint/eslint-pluginと@typescript-eslint/parserのインストール

ちなみに、App.tsxinterface Datasetinterface Answerの記述を消すと該当のエラーは消えます。が、別の型のエラーが起こります。

ググってもいい感じのヒントになりそうな情報が得られなかったため、質問させていただきました。

この、Line 0: Parsing error: Cannot read property 'map' of undefinedの原因など含め教えていただけると幸いです。

追記

parsing errorは解決したものの、以下のエラーが起こりました。

Argument of type 'Answer[]' is not assignable to parameter of type 'SetStateAction<never[]>'. Type 'Answer[]' is not assignable to type 'never[]'. Type 'Answer' is not assignable to type 'never'. TS2345

該当箇所は、App.tsxファイル内のdisplayNextQuestionsetAnswers(nextDataset.answers)部分です。

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

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

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

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

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

maisumakun

2020/12/06 23:16

当該のエラーはコンパイル時と実行時のどちらで発生したものでしょうか?
guest

回答1

0

App.tsxのinterface Datasetやinterface Answerの記述を消すと該当のエラーは消えます。

型宣言を関数内で行うことは通常しませんので、それらをAppより手前に引き出してみたらどうなりますでしょうか?

typescript

1interface Dataset { 2 "answers": Array<Answer>, 3 "question": string 4} 5 6interface Answer { 7 "answers": [ 8 {"content": string, "nextId": string} 9 ] 10} 11 12const App = () => { // 後略

投稿2020/12/06 23:18

maisumakun

総合スコア146018

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

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

kobaryo04ysh

2020/12/07 04:16

回答ありがとうございます! 試してみたところ、質問内容に追記した通りのエラーが起こりました。 一応、Parsing errorは解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問