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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

TypeScript

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

Q&A

0回答

738閲覧

どのような型を付与したらいいのかわからない

mahimiya

総合スコア32

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

TypeScript

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

0グッド

0クリップ

投稿2021/12/15 12:47

前提・実現したいこと

Next.js、TypeScript初心者です。

バイト先のドリンク管理アプリをNext.js,TypeScript,microCMSで開発しております。

発生している問題・エラーメッセージ

pagesディレクトリからcomponentsディレクトリにpropsを渡したいのですが、dataの型がうまくいきません、、、

エラー文は

プロパティ'contents'は型'Data'にありませんが、型'{contents:Data[]}'では必須です。
index.tsx[18, 5]: 'contents'はここで宣言されています。
index.tsx[17, 3]: 予期された型は、型'IntrinsicAttributes & Props & { children?: ReactNode;}'に対してここで宣言されたプロパティ'data'から取得されています。

になります。

該当のソースコード

TypeScript(Next.js) (src/pages/wine/red/twoRank/index.tsx)

import { GetStaticProps } from "next"; import { WineLists } from "src/components/WineLists"; import { client } from "src/libs/client"; import { NextPage } from "next"; type Data = { name: string; origin: string; variety: string; taste: string; rank: string; producer?: string; image?: string; remarks?: string; }; type SampleImage = { wineImage: { url: string; }; }; type Props = { data: Data; sampleImage: SampleImage; }; export const getStaticProps: GetStaticProps<Props> = async () => { const data = await client.get({ endpoint: `redwine`, }); const sampleImage = await client.get({ endpoint: "wineimage", }); if (!data) { return { notFound: true, }; } return { props: { data, sampleImage, }, }; }; const TwoRank: NextPage<Props> = (props) => { console.log(props.data); return ( <WineLists keyRank="2ランク" data={props.data} sampleImage={props.sampleImage.wineImage.url} /> ); }; export default TwoRank;

TypeScript(Next.js) (src/components/WineLists/index.tsx)

type Data = { id: string; name: string; origin: string; variety: string; taste: string; rank: string; producer?: string; image?: { url: string; }; remarks?: string; }; type Props = { keyRank: string; data: { contents: Data[]; }; sampleImage: string; }; export const WineLists: React.FC<Props> = (props) => { const rankData = props.data.contents?.filter( (data: Data) => data.rank[0] === props.keyRank ); return ( <div className="h-screen"> {rankData?.map((data: Data) => ( <div className="h-1/3 flex justify-around items-center bg-blue-100 mb-6" key={data.id} > <div> <img className="w-60 h-60 object-cover rounded-lg" src={data?.image ? data.image.url : props.sampleImage} alt="ワインの画像です" /> </div> <dl className="flex flex-wrap tracking-wide w-1/2 font-mono bg-yellow-50 rounded-lg p-7 text-gray-700"> <dt className="leading-relaxed flex w-3/12 font-bold"> ワイン名 :{" "} </dt> <dd className="leading-relaxed w-9/12">{data.name}</dd> <dt className="leading-relaxed flex w-3/12 font-bold">品種 : </dt> <dd className="leading-relaxed w-9/12">{data.variety}</dd> <dt className="leading-relaxed flex w-3/12 font-bold">産地 : </dt> <dd className="leading-relaxed w-9/12">{data.origin}</dd> <dt className="leading-relaxed flex w-3/12 font-bold">味わい : </dt> <dd className="leading-relaxed w-9/12">{data.taste}</dd> {data.producer ? ( <> <dt className="flex w-3/12 font-bold">生産者 : </dt> <dd className="w-9/12">{data.producer}</dd> </> ) : null} {data.remarks ? ( <> <dt className="flex w-3/12 font-bold">備考 : </dt> <dd className="w-9/12">{data.remarks}</dd> </> ) : null} </dl> </div> ))} </div> ); };

試したこと

propsの渡し方を確認した
IntrinsicAttributesについて調べた
配列の型定義について調べた

まだまだ勉強不足ですが、ご教授いただけたら幸いです。
どうか、よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

Next.js: 12.0.4
TypeScript: 4.5.2

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問