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

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

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

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

TypeScript

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

Q&A

解決済

1回答

681閲覧

TypeScriptを使ったNuxt.jsで、ajaxで取得したコンテンツの一部分を利用しようとすると`does not exist on type '{}'`エラーが出る

nieve

総合スコア33

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

TypeScript

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

0グッド

0クリップ

投稿2020/09/17 09:36

編集2020/09/17 09:52

Nuxt.js with TypeScript を初めて使ってみました。
モジュール nuxt/content(https://content.nuxtjs.org/)からコンテンツを引っ張ってきて、
その中の一部をとりだして加工したく、下記のようなコードを書きました。

引っ張ってきたデータのhogeHogeにあたる部分はテキストが入っています。

export default Vue.extend({ data () { return { info: {}, hoge: '' } }, async fetch() { this.info = await this.$content('infomation/' + this.$route.params.slug).fetch() this.hoge = this.info.hogeHoge } })

このコードではthis.hoge= this.info.hogeHogehogeHoge部分で下記エラーが表示されます。

TS2339: Property 'hogeHoge' does not exist on type '{}'.

エラーの意図するものと解決策がわからず。。。
取得してきたものの中味も型付けしないといけない。。。??
hogeHogeっていう型なんてない。。。。。。??
this.infoの中身をあらかじめめすべて型付けないといけない。。??

初歩的な質問で申し訳ないのですが、どう処理したらよいのでしょう?

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

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

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

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

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

guest

回答1

0

ベストアンサー

this.infoの中身をあらかじめめすべて型付けないといけない。。??

その通りです.

コンパイルエラーを解決するにはローカルステートの宣言である data 関数の戻り値の型定義をします.
その際, this.$content('infomation/' + this.$route.params.slug).fetch() の戻り値の型も定義する必要があります.

引っ張ってきたデータのhogeHogeにあたる部分はテキストが入っています。

とのことでしたのでこんなイメージでしょうか.
(尚,info の初期値は {} より undefined の方が fetch 関数の実装が簡潔になるので undefined にしました)

typescript

1type State = { 2 // 初期値 or fetch 後の状態を表す型 3 info: undefined | { hogeHoge: string; /* 他にもプロパティがある場合は適宜追加 */ }; 4 hoge: string; 5}

あとはこの定義した型を data 関数の戻り値として型をつけてあげればコンパイルエラーはなくなると思います.

typescript

1export default Vue.extend({ 2 data (): State { // 定義した型をつける 3 return { 4 info: undefined, 5 hoge: '' 6 } 7 }, 8 async fetch() { 9 this.info = await this.$content('infomation/' + this.$route.params.slug).fetch() 10 // this.info は undefined か { hogeHoge: string } 型なので 11 // undefined ではないかをチェックする文を書かないで this.hoge に代入しようとするとコンパイルエラーになります 12 if (this.info) { 13 this.hoge = this.info.hogeHoge 14 } 15 } 16}); 17

投稿2020/09/23 16:23

Yama-Tomo

総合スコア49

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

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

nieve

2020/09/24 05:09

ありがとうございます! 回答いただくのと入れ違いで、下記を書いて解決していたのですが、 いただいた内容、TypeScriptの型定義やその適応方法の勉強になります! こうやって適応させるのですね~~ ``` export default Vue.extend({ data () { return { info: { hogeHoge: '' }, hoge: '' } }, async fetch() { this.info = await this.$content('infomation/' + this.$route.params.slug).fetch(); this.hoge= this.info.hogeHoge } }) ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問