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

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

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

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

React.js

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

Q&A

解決済

1回答

349閲覧

Reactのコンポーネントで分割代入した仮引数が型定義をしてもany型になる

ky-

総合スコア4

TypeScript

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

React.js

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

0グッド

0クリップ

投稿2024/05/22 08:19

編集2024/05/22 14:41

実現したいこと

 Reactで、配列を受け取り、それをmap関数で処理しJSXを返す関数を実装したい。
仮引数は分割代入で宣言し、stringを持つ配列、あるいはnumberを持つ配列どちらかであると定義したい。

発生している問題・分からないこと

 分割代入を行い型定義をしたはずが、仮引数の型がany型となる。関数本体で引数を呼び出しても見つからないとエラーが出る。

エラーメッセージ

error

1[{ 2 "resource": "/d:/dev/runnersheet/src/app/Test.tsx", 3 "owner": "typescript", 4 "code": "7010", 5 "severity": 8, 6 "message": "'Test' には戻り値の型の注釈がないため、戻り値の型は暗黙的に 'any' になります。", 7 "source": "ts", 8 "startLineNumber": 1, 9 "startColumn": 25, 10 "endLineNumber": 1, 11 "endColumn": 29 12},{ 13 "resource": "/d:/dev/runnersheet/src/app/Test.tsx", 14 "owner": "typescript", 15 "code": "2842", 16 "severity": 8, 17 "message": "'(Missing)' は、'props' の未使用の名前変更です。型の注釈として使用するつもりでしたか?", 18 "source": "ts", 19 "startLineNumber": 2, 20 "startColumn": 11, 21 "endLineNumber": 2, 22 "endColumn": 11, 23 "relatedInformation": [ 24 { 25 "startLineNumber": 2, 26 "startColumn": 11, 27 "endLineNumber": 2, 28 "endColumn": 12, 29 "message": "ここにパラメーター全体の型を追加することによってのみ、'props' の型を書き込むことができます。", 30 "resource": "/d:/dev/runnersheet/src/app/Test.tsx" 31 } 32 ] 33},{ 34 "resource": "/d:/dev/runnersheet/src/app/Test.tsx", 35 "owner": "typescript", 36 "code": "7031", 37 "severity": 8, 38 "message": "バインド要素 '(Missing)' には暗黙的に 'any' 型が含まれます。", 39 "source": "ts", 40 "startLineNumber": 2, 41 "startColumn": 11, 42 "endLineNumber": 2, 43 "endColumn": 11 44},{ 45 "resource": "/d:/dev/runnersheet/src/app/Test.tsx", 46 "owner": "typescript", 47 "code": "1003", 48 "severity": 8, 49 "message": "識別子が必要です。", 50 "source": "ts", 51 "startLineNumber": 2, 52 "startColumn": 12, 53 "endLineNumber": 2, 54 "endColumn": 13 55},{ 56 "resource": "/d:/dev/runnersheet/src/app/Test.tsx", 57 "owner": "typescript", 58 "code": "7053", 59 "severity": 8, 60 "message": "型 'any' の式を使用して型 'Number' にインデックスを付けることはできないため、要素は暗黙的に 'any' 型になります。", 61 "source": "ts", 62 "startLineNumber": 2, 63 "startColumn": 12, 64 "endLineNumber": 2, 65 "endColumn": 31 66},{ 67 "resource": "/d:/dev/runnersheet/src/app/Test.tsx", 68 "owner": "typescript", 69 "code": "2693", 70 "severity": 8, 71 "message": "'string' は型のみを参照しますが、ここで値として使用されています。", 72 "source": "ts", 73 "startLineNumber": 2, 74 "startColumn": 13, 75 "endLineNumber": 2, 76 "endColumn": 19 77},{ 78 "resource": "/d:/dev/runnersheet/src/app/Test.tsx", 79 "owner": "typescript", 80 "code": "2693", 81 "severity": 8, 82 "message": "'number' は型のみを参照しますが、ここで値として使用されています。", 83 "source": "ts", 84 "startLineNumber": 2, 85 "startColumn": 22, 86 "endLineNumber": 2, 87 "endColumn": 28 88},{ 89 "resource": "/d:/dev/runnersheet/src/app/Test.tsx", 90 "owner": "typescript", 91 "code": "1011", 92 "severity": 8, 93 "message": "要素アクセス式では、引数を取る必要があります。", 94 "source": "ts", 95 "startLineNumber": 2, 96 "startColumn": 30, 97 "endLineNumber": 2, 98 "endColumn": 30 99},{ 100 "resource": "/d:/dev/runnersheet/src/app/Test.tsx", 101 "owner": "typescript", 102 "code": "1128", 103 "severity": 8, 104 "message": "宣言またはステートメントが必要です。", 105 "source": "ts", 106 "startLineNumber": 3, 107 "startColumn": 1, 108 "endLineNumber": 3, 109 "endColumn": 2 110},{ 111 "resource": "/d:/dev/runnersheet/src/app/Test.tsx", 112 "owner": "typescript", 113 "code": "1128", 114 "severity": 8, 115 "message": "宣言またはステートメントが必要です。", 116 "source": "ts", 117 "startLineNumber": 3, 118 "startColumn": 2, 119 "endLineNumber": 3, 120 "endColumn": 3 121},{ 122 "resource": "/d:/dev/runnersheet/src/app/Test.tsx", 123 "owner": "typescript", 124 "code": "2304", 125 "severity": 8, 126 "message": "名前 'props' が見つかりません。", 127 "source": "ts", 128 "startLineNumber": 4, 129 "startColumn": 5, 130 "endLineNumber": 4, 131 "endColumn": 10 132},{ 133 "resource": "/d:/dev/runnersheet/src/app/Test.tsx", 134 "owner": "typescript", 135 "code": "7006", 136 "severity": 8, 137 "message": "パラメーター 'data' の型は暗黙的に 'any' になります。", 138 "source": "ts", 139 "startLineNumber": 4, 140 "startColumn": 16, 141 "endLineNumber": 4, 142 "endColumn": 20 143},{ 144 "resource": "/d:/dev/runnersheet/src/app/Test.tsx", 145 "owner": "typescript", 146 "code": "7006", 147 "severity": 8, 148 "message": "パラメーター 'i' の型は暗黙的に 'any' になります。", 149 "source": "ts", 150 "startLineNumber": 4, 151 "startColumn": 22, 152 "endLineNumber": 4, 153 "endColumn": 23 154}]

該当のソースコード

TypeScript

1export default function Test({ 2 props: (string | number)[] 3}) { 4 props.map((data, i) => (data)); 5} 6// propsの型がany型となる

TypeScript

1export default function Test( 2 children: { props: (string | number)[] } 3) { 4 const { props } = children; 5 props.map((data, i) => (data)); 6} 7// ちゃんと型定義も反映されているが、いちいちchildrenの宣言をするのは手間なので避けたい

TypeScript

1type TestProps = (string | number)[]; 2 3export default function Test({ 4 props: TestProps 5}) { 6 props.map((data, i) => (data)); 7} 8// 先に型定義したらどうかと思ったらそもそもpropsが見つからないようだ。

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

 create-next-appコマンドで作ったフォルダだが、以前のエラーの際に「npm i」で再インストールしたら直った経緯があった、今回も試したがエラー改善にはならなかった。

補足

インストールされているパッケージ
├── @types/node@20.12.12
├── @types/react-dom@18.3.0
├── @types/react@18.3.2
├── eslint-config-next@14.2.3

 なお不具合が発生する前にvscodeのショートカットを試しに使っており、それが悪さをしているのかとも考えた。新しいファイルを作成(ctrl+win+alt+N)を誤ってctrl+shit+alt+Nなどと入力していた。関係はないと思うが念のため。

 フォルダを完全に削除しcreate-next-appで再度フォルダを作成しなおす、vscodeをアンインストールし再インストールするなどしてもだめだった。

├── eslint@8.57.0
├── next@14.2.3
├── react-dom@18.3.1
├── react@18.3.1
└── typescript@5.4.5

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

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

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

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

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

guest

回答1

0

自己解決

 {props} : 型と表記しなければいけないところを、{props : 型}と表記しており、エラーが出ていました。
今は解決しました。

投稿2024/05/22 15:37

ky-

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問