前置き
今回はNuxt TypeScriptについてです。
導入方法と簡単な書き方をご紹介🌟
本格的に使う前に
こういう記事を見ると良いかもです💡
Nuxt(vue) + TypeScriptをはじめるときに知っておきたかった10のこと
フレームワークなしの場合はこちら
共通の書き方も少しずつ出しているので
気になったら見てみてください✨👀
⬇️TypeScriptとは
TypeScriptの良さ
【Nuxt.js】超初心者向けTypeScript〜環境構築編〜
⬇️自動コンパイルやクラスについて
【TS導入編】超初心者向けTypeScript〜自動コンパイル〜
【TS導入編】超初心者向けTypeScript〜環境構築の補足&クラスなど〜
参考:
そのNuxt、TypeScriptで。
Nuxt.js TypeScript - 実践TypeScript アップデート -
[Vue+TypeScript] Vue.extend で Vue らしさを保ちつつ TypeScript で書くときの型宣言についてまとめた
インストール
まずはインストール$ npm init nuxt-app
で
Nuxtプロジェクト作成時に
選択していれば
別途のインストールは必要なし❗️
⬇️プロジェクト作成方法はこちら
【Nuxt.js】Nuxtの環境構築をしよう
3つのパッケージ
3つのパッケージがありますが
必須とオプションに分かれます。
Nuxt TypeScript > イントロダクション
必須パッケージ
$ npm init nuxt-app
で
TSを選択すると
この2つが入ります。
@nuxt/types
@nuxt/typescript-build
buildはNuxtをTypeScriptでコンパイルするのに必要
Nuxt TypeScript > セットアップ
npm install --save-dev @nuxt/typescript-build @nuxt/types
1 2 3 |
export default { buildModules: ['@nuxt/typescript-build'] } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
{ "compilerOptions": { "target": "ES2018", "module": "ESNext", "moduleResolution": "Node", "lib": [ "ESNext", "ESNext.AsyncIterable", "DOM" ], "esModuleInterop": true, "allowJs": true, "sourceMap": true, "strict": true, "noEmit": true, "experimentalDecorators": true, "baseUrl": ".", "paths": { "@/*": [ "./app/*" ], "~/*": [ "./*" ] }, "types": [ "@types/node", "@nuxt/types", "@nuxtjs/firebase", "@nuxtjs/dayjs", "nuxt-i18n" ] }, "exclude": [ "node_modules", ".nuxt", "dist" ] } |
オプションパッケージ
nuxt-tsを使用したいなら
こちらも入れてね
ということらしいです。
@nuxt/typescript-runtime
Nuxt TypeScript > Runtime(オプション)
nuxt-tsとは何ぞや❓
という感じですが、$ npm init nuxt-app
で
custom server frameworkを
選択している場合に必要。
つまりサーバーでTypeScriptを使った
Nuxtを稼働させるために必要❗️
今はその質問がなくなったので、
自分で後入れしている場合は
インストールしましょう💡
動作確認
必須パッケージのみで
とりあえずシンプルな型指定で
エラーもなく動きました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<template> <button type="button" @click="message">click</button> </template> <script lang="ts"> import Vue from 'vue' export default Vue.extend({ name: 'Page', methods: { message() { const text: string = 'hello!' console.log(text) } } }) </script> |
自動コンパイル
フレームワークなしの時にやった$ npm run generate
してからlite-serverを使用しても
上手くいきませんでした。
ローカルサーバーと
自動ブラウザリロード系が必要かも…
BrowserSyncとかts-loaderあたり…❓🤔
と思ったのですがNuxtの場合は
ひとまずこれで動きます🌟
$ npm run dev // macターミナル
$ tsc -watch // エディターターミナル
tscコマンドを使うには
TSのグローバルインストールが必要💫
$ npm install typescript --save-dev
ただやっぱり
webpack-dev-server
ts-loader
が必要な感じもします。
設定がチンプンカンプンだったので
ある程度使うようになってから
こちらを参考にやってみます🍀
最新版TypeScript+webpack 5の環境構築まとめ
Vue.extendで書いてみる
書き方がいくつかある中で
1番良いのがVue.extend❤️
Options API と言われています💫
script内がこんな感じで
ここにどんどんTSを
書き込んでいきます✍️
1 2 3 4 5 6 7 8 9 |
<template> <Tutorial/> </template> <script lang="ts"> import Vue from 'vue' export default Vue.extend({}) </script> |
サンプルコード①data
雰囲気を掴むためにdata
で使用してみましょう。
VueのAPIを確認すると
こう書かれています✍️
Vue > API > オプション/データ
1 2 3 4 5 6 |
// Vue.extend() 内では、関数を使わなければいけない var Component = Vue.extend({ data: function () { return { a: 1 } } }) |
ということで
Nuxtで書いてみましょう❣️
ほとんどVueと変わりません。DataType
の部分は好きな名称でOK⭕️
TSだと分かりやすくするために、
先頭は大文字にする方が良さそうです。
コードはこちらを使わせていただきました。
[Vue+TypeScript] Vue.extend で Vue らしさを保ちつつ TypeScript で書くときの型宣言についてまとめた
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<template> <div> <p>{{ value }}</p> <p>{{ enable }}</p> <p>{{ count }}</p> </div> </template> <script lang="ts"> import Vue from 'vue' export type DataType = { value: string enable: boolean count: number } export default Vue.extend({ name: 'Page', data(): DataType { return { value: 'hoge', enable: true, count: 0 } } }) </script> |
他も同じような書き方です!
型定義をしておいて、Vue.extend
内では
実際の値、式を書いていく…
といった感じですね🌱✨
サンプルコード②props
props
についてはVue APIではなく
Nuxt TypeScriptに明記されています👀
Options API
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<template> <p>{{ user.message }}</p> </template> <script lang="ts"> import Vue, { PropOptions } from 'vue' interface User { message: string } export default Vue.extend({ name: 'PropOptions', props: { user: { type: Object, required: false } as PropOptions<User> } }) </script> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<template> <div> <PropOptions :user="user" /> </div> </template> <script lang="ts"> import Vue from 'vue' export default Vue.extend({ data() { return { user: { message: 'Hello!' } } } }) </script> |
storeの場合
Vuexを使用したいから
storeに書く…
となるとまた色々かわるので、
そちらも記事にしたいですね🎈🧸
これがすごく参考になりそう…!
Options APIを使用してNuxt.js + TypeScriptでVuexに型指定する方法(nuxt-typed-vuex)
まとめ
TSについて色々やってきましたが、
やっとスタート地点…
の手前くらいは来ました❗😂笑
公式のどのページを確認すれば良いのか
なかなか分からずにググり続け…🔎
ようやく分かってきたのが
大きいかもしれません🎈🧸
あと最近のNuxtホントにイイですね👍💕
ディレクトリシンプルになったし、
質問答えるだけで必要なものだけ入るし、$ npm install nuxt
しなくていいし
コンポーネント自動インポートできるし、
煩わしさがないです✨