🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vue.js

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

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

JavaScript

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

TypeScript

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

Q&A

解決済

1回答

897閲覧

【Vue】javascriptからtypescriptへのコード書き換え

yochun02

総合スコア76

Vue.js

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

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

JavaScript

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

TypeScript

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

0グッド

0クリップ

投稿2019/09/09 11:10

編集2019/09/09 11:11

vue.jsのスクリプトを既存のjavascriptからtypescriptへ書き換えたいのですが、dataが配列になっている場合どう書けばよいかわかりません。
現在のコード

javascript

1<script> 2export default { 3 data: () => ({ 4 cards: [ 5 { title: 'hamster1', src: 'hoge1.jpg', flex: 12 }, 6 { title: 'hamster2', src: 'hoge2.jpg', flex: 12 } 7 ] 8 }), 9 methods: { 10 getImgUrl (img) { 11 return require('@/assets/img/' + img) 12 } 13 } 14}

とりあえずそのまんま書き換えたのですが、

typescript

1<script lang="ts"> 2import Vue from 'vue-property-decorator' 3export default class testData extends Vue { 4 cards: [ 5 { title: 'hoge1', src: 'hoge1.jpg', flex: 12 }, 6 { title: 'hoge2', src: 'hoge2.jpg', flex: 12 } 7 ], 8 getImgUrl (img: string): string { 9 return require('@/assets/img/' + img) 10 } 11} 12</script>

どこを直せばよいかわからない状態です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

動作確認を行っていないのでなんとも言えないですが、
以下のように書き換えたら動作しませんでしょうか?

<script lang="ts"> import Vue from 'vue-property-decorator' import Component from 'vue-class-component' @Component export default class testData extends Vue { cards = [ { title: 'hoge1', src: 'hoge1.jpg', flex: 12 }, { title: 'hoge2', src: 'hoge2.jpg', flex: 12 } ] getImgUrl (img: string): string { return require('@/assets/img/' + img) } } </script>

掲示されているコードが動かない原因は、TypeScriptに書き換えたことではなく、vue-class-component の記法で書き換えたことにあります。vue-class-componentはその名の通り、Vueの単一ファイルコンポーネントをオブジェクトリテラルの形式ではなく、class形式で書き下すことができるライブラリです。
それは、ファイルの冒頭に、

export default class testData extends Vue {}

と記述されていることからもわかります。このような記述スタイルをクラススタイルと言ったりします。

ちなみに、通常のVueの単一ファイルコンポーネントは以下のように記述すると思います。

export default {}

これは、ただ単純にObjectをexportしているだけなので、オブジェクトスタイルといったりします。

ここまで説明すればわかるかもしれませんが、クラススタイルで書くのであれば、クラスの中はJavascriptのクラス内で許された記法しか使うことができません。同様にオブジェクトスタイルで書くのであれば、JavaScriptのオブジェクトリテラルの形式でなければ書くことができません。

詳細な記法についてはクラスやオブジェクトリテラルでググってもらえれば、それぞれの記法の違いがわかるかと思います。(ちなみにこれはJSの言語仕様の話で、Vue固有の記法ではありません)

(もしくはもっと手っ取り早く知りたいのであれば、vue-class-componenのREADMEを読むのが良いかもしれません)

VueでTypeScriptを使う場合は、型補完を行う時にクラススタイルで記述するほうが表現力が高くなるのでこの記法を使うことが多いようです。決して、TypeScriptを使うようにしたからクラススタイルになったわけではありません。公式ドキュメントのTypeScriptの紹介ページでさらっとvue-class-componentを使う書き方が紹介されているので誤解されがちですが、オブジェクトスタイルのままTypeScriptを使う書き方もあります。参考

投稿2019/09/09 15:44

編集2019/09/09 16:54
KuwabataK

総合スコア306

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

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

yochun02

2019/09/10 11:13 編集

丁寧に教えてくださりありがとうございます!! 試したところ、 "export 'default' (imported as 'Vue') was not found in 'vue-property-decorator' Unable to resolve signature of class decorator when called as an expression. Type '<VC extends VueClass<Vue>>(target: VC) => VC' is not assignable to type 'typeof testData'. Type '<VC extends VueClass<Vue>>(target: VC) => VC' provides no match for the signature 'new (): testData'. import Component from 'vue-class-component' @Component ^ export default class testData extends Vue { cards = [ ... このようなエラーがでました
yochun02

2019/09/10 11:19

'vue-property-decorator' -> 'vue' としたら行けました!ありがとうございます!
KuwabataK

2019/09/10 11:29

あっ、そうなのですね。良かったです! こちらも確認不足のソースを貼ってしまって申し訳ないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問