0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Nuxt3 から typescript 導入

Posted at

はしがき

プログラミングの効率向上のため、typescript を使うように、計画しました。
自分は入社前から、typescript を使っていて、typescript の利益など知っているので、みんな一緒に使って、効率をあげたかったので、導入しました。

typescript を使う方ならば、javascript の経験が結構あると思っていて、javascript の説明は飛ばします。

typescript はなに?

JavaScript and More
TypeScript adds additional syntax to JavaScript to support a tighter integration with your editor. Catch errors early in your editor.

A Result You Can Trust
TypeScript code converts to JavaScript, which runs anywhere JavaScript runs: In a browser, on Node.js or Deno and in your apps.

Safety at Scale
TypeScript understands JavaScript and uses type inference to give you great tooling without additional code.

実際に build して、web browser から、確認するまえに javascript に type を追加して、IDE から、コードのエラーを catch できます。

build する前にエラーが確認できるって、すごいと思います。

typescript の利益

強力な type check system

type なので、使います。type inference を通じて、これがなんの変数か、数字か、文字列か、リストか boolean か...を確かめます。

Javascript は Dynamically typed language です。なので、このコードの type やエラーがあるかどうかは実際に実行する前にはわかりません。
しかし、Typescript は statically typed language です。compile する language なので、実際に実行する前に(build するとき)どこからエラーがあるか確認できます。

ある site からアンケートしたことです。javascript から多いエラーの7個が type エラーです。
最近 IDE や plugin(vscode の extension のようなこと)がいろいろ発展しましたと言っても、type エラーを100%知ることが難しいです。

高い効率の type

javascript でコードを作成したときは、object や function の parameter の値の type がなんなのか?確認するためにいろいろ頑張りましたが、typescript を使ったら、その type を記憶する必要がありません。
IDE が自動でリストアップしますので、コードの生成の効率が上がります。

javascript と互換性

typescript は javascript と100%互換できると言われるほど、javascript との互換性が高いです。
javascript file その extension を変更するだけで、動ける場合もあります。
これは Typescript が ES6 を基盤して、作られた language なので、できます。

「だったら、typescript から作られたコードは ES5 以下の browser から使える?」かもしれません。
typescript は compile しながら、ES6 を ES5(もしくは ES3)への変更します。

導入方法

nuxt3 の project がすでに作られている前提で話します。

build するとき、type check しますので、 vue-tsctypescript を install します。

yarn add -D vue-tsc@^1 typescript

この nuxt3 project に適用する必要があるので、nuxt.config.ts もしくは、nuxt.config.js に以下のように typeCheck を true に します。

export default defineNuxtConfig({
  // ... your option
  typescript: {
    typeCheck: true
  }
  // ... your option
})

この nuxt.config.ts もあくまで ts なので、build するとき、typeCheck されます。
config file を例外するのは tsconfig.json から、設定するので、これからしましょう。

{
  "compilerOptions": {
    "allowJs": true, // javascript から gradually typescript への migration をしています。
    "declaration": false, // project 全ての js もしくは ts に対して、.d.ts を作ります
    "baseUrl": ".",
    "paths": { // nuxt.config.ts と alias が共有しないので、記入する必要があります。
      "@/*": ["*"],
      "my-alias": ["my/path/file.js"]
    }
  },
  "extends": "./.nuxt/tsconfig.json", // nuxt の公式 default setting
  "exclude": [
    "nuxt.config.ts" // 自分は元々 nuxt.config.js を使っていたし、まだ、type がちゃんと設定されていないこともあるので、exclude します。
  ]
}

また、CommonJS の書き方を ES6 の書き方への migration が必要です。

// 例
// CommonJS
const MyPlugin = require('./plugins/myPlugin')
module.export = MY_PLUGIN
// ES6
import MyPlugin from './plugins/myPlugin'
export default MY_PLUGIN

このようにしたら、typescript を使えます。*.ts もしくは vue file から<script lang='ts'> を使ったら、使えます。

参考&関連 URL

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?