採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

Vue + TypeScript — Setup

テクノロジ系 / L06 vue-typescript — TypeScript 連携

Vue + TypeScript — Setup

新規プロジェクト

$ pnpm create vue@latest
# → TypeScript: Yes
# → Vue Router: Yes
# → Pinia: Yes
# → Vitest: Yes

公式の create-vue で対話形式に。

最初から TS テンプレ で作るのが楽。

tsconfig.json

{
  "extends": "@vue/tsconfig/tsconfig.dom.json",
  "compilerOptions": {
    "strict": true,
    "noEmit": true,
    "paths": {
      "@/*": ["./src/*"]
    }
  },
  "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"]
}

@vue/tsconfig が Vue 向けのプリセットを提供。

paths@/components/... のエイリアス。

SFC で TS

<script setup lang="ts">
import { ref, computed } from "vue";

interface User {
  id: number;
  name: string;
}

const user = ref<User | null>(null);
const greeting = computed(() => user.value ? `Hi, ${user.value.name}` : "Hi, guest");
</script>

<template>
  <p>{{ greeting }}</p>
</template>

<script setup lang="ts"> で TS を有効化。

型チェック

vite はビルド時に型チェックしない (高速のため)。

別途 vue-tsc:

$ pnpm add -D vue-tsc
{
  "scripts": {
    "typecheck": "vue-tsc --noEmit",
    "build": "vue-tsc --noEmit && vite build"
  }
}

vue-tsc = TS + Vue SFC を理解できる tsc。

VSCode 拡張 — Vue Official (旧Volar)

「Vue Official」拡張を入れる。

.vue ファイル内で TS の補完・エラー表示が効く。

「Vetur」(旧) は無効化すること。

auto import (任意)

$ pnpm add -D unplugin-auto-import unplugin-vue-components
// vite.config.ts
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";

export default defineConfig({
  plugins: [
    vue(),
    AutoImport({ imports: ["vue", "vue-router", "@vueuse/core"] }),
    Components({ dirs: ["src/components"] }),
  ],
});

ref / computed / useRouteimport 不要 に。

書く量が減る。ただし TS の追跡しやすさはトレードオフ。

まとめ

  • pnpm create vue で TS テンプレ
  • <script setup lang="ts"> を全 SFC に
  • 型チェックは vue-tsc --noEmit
  • VSCode は「Vue Official」拡張
  • auto-import は便利だが導入は要検討

次は Props の型付け

考えてみよう

既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。

Lv1: 基本 — create-vue で TS テンプレ

問題

pnpm create vue@latest
# TypeScript: Yes
# Vue Router: Yes
# Pinia: Yes
# Vitest: Yes

pnpm install && pnpm dev で起動。

src/App.vue<script setup lang="ts"> で TS で書き換える。

合格基準

  • 起動成功
  • VSCode で TS 補完が効く

Lv2: 応用 — vue-tsc で型チェック

問題

pnpm add -D vue-tsc

package.json:

{
  "scripts": {
    "typecheck": "vue-tsc --noEmit",
    "build": "vue-tsc --noEmit && vite build"
  }
}

意図的に型エラーを入れて pnpm typecheck で失敗、修正で通る、を確認。

合格基準

  • typecheck 失敗 → 修正 → 成功

Lv3: 発展 — auto-import + Components

問題

pnpm add -D unplugin-auto-import unplugin-vue-components

vite.config.ts:

import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";

export default defineConfig({
  plugins: [
    vue(),
    AutoImport({ imports: ["vue", "vue-router", "@vueuse/core"] }),
    Components({ dirs: ["src/components"] }),
  ],
});

<script setup>ref / computed / useRouteimport なし で使えることを確認。

合格基準

  • import 不要で書ける
  • メリット (省コード) と デメリット (追跡しづらい) を理解

提出

submission.md に3問の回答を。