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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

TypeScript

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

React.js

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

Q&A

解決済

1回答

1363閲覧

react(typescript)の戻り値がわからない

pokemonta

総合スコア170

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

TypeScript

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

React.js

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

0グッド

0クリップ

投稿2021/02/07 07:30

以下のプログラムに関しまして、
ざっくりとした私の理解は以下の通りです。
getStaticProps() → getaccount() →戻り値をprops格納して返却

そのうえで下記2点がわからないのでご教示願います。

1.JSON.parse(json).persons を実行することで
person.jsonからpersonsオブジェクトを取得できると思いますが
後半のas Person[]という記述が理解できません。
型チェックの意味でしょうか?値の追加ならappendを使うと思いますが、この用法はtypescriptならでしょうか?

2.getStaticProps()の戻り値がわかりません。
getaccount()からデータを取得した後、allPersonsDataには以下の値が入る認識です。
allPersonsData.Person[]
さらにそれをpropsに格納しますので
props.allPersonsData.Personに最終的になるはずなのですが
戻り値の指定の仕方が複雑すぎてよくわかりません。どのように見ていけば良いのかご教示願います。
Promise<{ props: { allPersonsData: Person[] } }>

json

1{ 2 "persons": [ 3 { 4 "user_id": 123, 5 "user_name": "yamada", 6 } 7 ] 8}

typescript

1export type Person = { 2 "user_id": number, 3 "user_name": string 4} 5 6 7export function getaccount() { 8 const json = fs.readFileSync("C:\temp\person.json", "utf8") 9 return JSON.parse(json).persons as Person[] 10} 11 12 13export async function getStaticProps(): Promise<{ props: { allPersonsData: Person[] } }> { 14 const allPersonsData = getaccount() 15 16 return { 17 props: { 18 allPersonsData 19 } 20 } 21}

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

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

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

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

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

hoshi-takanori

2021/02/07 08:37

> 後半のas Person[]という記述が理解できません。 JSON.parse の結果は any 型ですが、これを Person[] 型のはずだと教えてあげるためのものです。 型チェックを無効にするものなので、実行時にエラーが発生する可能性があります。 > props.allPersonsData.Personに最終的になるはずなのですが それはどう言う意味でしょうか? getStaticProps は async 関数なので、戻り値は Promise になりますが、非同期処理をしていないので async にする必要はないですね…。
pokemonta

2021/02/07 11:10

戻りに型を指定する概念がなくて 空で上記コードを書く自信がありません。 特に下記のようなprops.allPersonsData.Person 多段階の値に対してどのように型を指定すればよいのでしょうか
guest

回答1

0

ベストアンサー

1について、JSON.parse()の返り値の型はanyになってしまうため型アサーションを使ってas Person[]とすることでPerson[]を型付けしています
https://typescript-jp.gitbook.io/deep-dive/type-system/type-assertion

2について、Promiseは非同期処理を扱うオブジェクトの型です
関数名にもasyncとついてますが、Promiseやasync-awaitの説明ははがくなるので調べてみた方が良いと思います

ちなみにgetStaticPropsはNext.js独自の関数ですね
https://nextjs.org/docs/basic-features/data-fetching#getstaticprops-static-generation

投稿2021/02/08 01:34

mikan3rd

総合スコア220

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問