【Nuxt.js】クラスベースコンポーネントを使えるようにする(nuxt-property-decorator)

Typescriptを使用したVue.jsの開発をしていた時はクラスベースコンポーネントでVueコンポーネントを開発していたので、Nuxt.jsでも同様に使えるようにしようと思って設定しました。

環境情報

node.js: version 12.18.0
npm: version 6.14.4
Nuxt.js: version 2.13.0
Typescript: version 3.8.3

Nuxt.jsでクラスベースコンポーネントを使えるようにする

クラスベースコンポーネントを使用するために今回使用するパッケージはnuxt-property-decoratorです。

nuxt-property-decoratorをインストールする

npmでnuxt-property-decoratorを以下のコマンドでインストールします。

npm install --save nuxt-property-decorator

このパッケージを入れるとクラスベースコンポーネントで記載できるようになります。

クラスベースコンポーネントに書き換える

例えばVueファイルにこのようなTypescriptの記載があったとします。(私はクラスベースコンポーネントを以外使ったこと無いので記載間違っているかも・・・)

<script lang="ts">
import Vue from 'vue'

export default Vue.extend({
	data() {
		return {
			msg: 'Sample'
		}
	},
	props: {
		propText: { default: '', type: String, require: true },
	}
})
</script>

これをクラスベースコンポーネントに書き換えます。

<script lang="ts">
import { Component, Prop, Vue } from 'vue-property-decorator';

@Component({
	data() {
		return {
			msg: 'Sample'
		}
	},
})
export default class SampleComponent extends Vue {
	private msg: string
	
	@Prop({ default: '', required: true })
	private propText: string
}
</script>

クラスベースコンポーネントで記載するとこんな感じです。

今回インストールしたnuxt-property-decoratorvue-property-decoratorのラッパーだそうで、nuxt-property-decorator独自のアノテーションも追加されているとのことです。この辺りは実際に使用した際にまた記事にしようかと思います。

参考

https://qiita.com/simochee/items/e5b77af4aa36bd0f32e5