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

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

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

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

TypeScript

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

Q&A

1回答

838閲覧

TypeScriptで戻り値の型の書き方が分からない

universegift77

総合スコア12

JavaScript

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

TypeScript

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

0グッド

1クリップ

投稿2022/05/27 21:58

編集2022/05/27 22:00

やりたいこと:
URL先のデータを取得してきて、CheerioAPIにロードさせたものを返す関数を作りたいです。
ただし、429やサーバーエラーに対しては一定時間待機してから再帰的に呼び出したりする予定です。

問題:
thenではPromise<CheerioAPI>型を返し、catchでも再帰呼び出しによって同じ関数を実行するので、戻り値が発生するとしたら常にPromise<CheerioAPI>型が返ってくるはずなのですが、getUrl()の戻り値型部分「 Promise<CheerioAPI>」で警告が発生します

Represents the completion of an asynchronous operation

A function whose declared type is neither 'void' nor 'any' must return a value.ts(2355)

ここからどう書けば警告が出なくなるのか知りたいです。せっかくTypeScriptを書いているので戻り値の型をAnyにすることは避けたいです。
TypeScript初心者のため、そもそもの書き方に問題があるかもしれません。そういった点の指摘も歓迎です。

TypeScript

1 /** 2 * return soup by url 3 * @param url 4 * @returns 5 */ 6 async getUrl(url: string): Promise<CheerioAPI> { 7 await axios.get(url) 8 .then(response => { 9 const html: any = response.data; 10 const soup: CheerioAPI = cheerio.load(html); 11 return soup; 12 13 }).catch(err => { 14 //キャッチされたerrがAxiosのエラーであることを保証するための型ガード。これをすることでerrの.statusなどにアクセスしてもエディタから警告が出ない 15 if (axios.isAxiosError(err)) { 16 switch (err.response.status) { 17 case 429: 18 break; 19 20 default: 21 break; 22 } 23 } 24 return this.getUrl(url); 25 }) 26 }

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

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

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

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

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

guest

回答1

0

thenではPromise<CheerioAPI>型を返し

関数の外まで返せていません。

awaitの結果を投げ捨てていますので、今のままではPromise<void>を返すこととなります。

投稿2022/05/27 23:56

編集2022/05/28 00:02
maisumakun

総合スコア145184

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問