型チェック
vize check は .vue、.ts、.tsx、.d.ts をプロジェクト全体で一度に型チェックします。
vue-tsc --noEmit に相当するコマンドで、同じ TypeScript の診断(同じ TS#### コード)を、.vue
ファイル内の該当行を指して報告します。
Note
型チェックはアルファ版の機能です。CI の手順を置き換える前に、現在の
vue-tscと並べて実行し、 自分のプロジェクトで結果を比べてください。安定性も参照してください。
実行する
Vize のヘルパーを使う Vite+ プロジェクトでは、生成されたタスクを実行します。
vp run typecheck
Vite+ を使わない場合は、vize パッケージをインストールしてコマンドを直接実行します。パッケージには
各プラットフォーム向けの TypeScript ネイティブコンパイラーが含まれているため、追加のインストールは
不要です。
vp install -D vize
vp exec vize check
引数を省略すると、最も近い tsconfig.json の files、include、exclude を読み込みます。
対象を絞る場合は、パスや別のプロジェクトを指定します。
vize check src
vize check --tsconfig tsconfig.app.json
出力の例
次のコンポーネントがあるとします。
<script setup lang="ts">
const props = defineProps<{ step: number }>();
const emit = defineEmits<{ change: [value: number] }>();
</script>
<template>
<button @click="emit('change', props.step.toFixed())">{{ props.stepp }}</button>
</template>
vize check はテンプレート内の 2 つの誤りを、ソース上の位置とともに報告します。
src/Counter.vue
error:7:34 [TS2345] Argument of type 'string' is not assignable to parameter of type 'number'.
error:7:66 [TS2551] Property 'stepp' does not exist on type ... Did you mean 'step'?
✗ Type checked 1 files in 487.30ms
2 error(s)
エラーがあると終了コードが 0 以外になるため、そのまま CI のゲートに使えます。機械で読む場合は
--format json、警告でも失敗させる場合は --max-warnings 0 を使ってください。
チェック対象
| 対象 | デフォルト | 無効にする方法 |
|---|---|---|
<script> と <script setup> のコード |
有効 | tsconfig でファイルを除外する |
| テンプレートの式とバインディング | 有効 | --no-check-template-bindings |
| 子コンポーネントに渡す props | 有効 | --no-check-props |
| emit するイベントとその引数 | 有効 | --no-check-emits |
Options API のテンプレートバインディング(data、computed、methods など) |
有効 | vue.typeChecker.optionsApi: false |
通常の .ts / .tsx / .d.ts |
有効 | tsconfig でファイルを除外する |
同じ設定は vite.config.ts にも書けます。
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
typeChecker: {
checkProps: true,
checkEmits: true,
checkTemplateBindings: true,
optionsApi: true,
},
},
});
型チェックを現在のツールに任せる場合は vue.typeChecker.enabled: false にします。同じ vue の設定は
通常の Vite プラグインでも使えます。すべてのキーは設定リファレンス
を参照してください。
グローバルな型と自動インポート
Vize が参照できるのは、TypeScript プロジェクトから見える型だけです。declare module "vue" で追加した
グローバルや、auto-imports.d.ts、components.d.ts などの生成ファイルは、チェックする
tsconfig.json の include に含めてください。
{
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "src/**/*.d.ts"]
}
Tip
$t、$route、自動インポートしたコンポーネントが「存在しない」と報告される場合、多くは宣言 ファイルがincludeの外にあります。includeに追加するか、--tsconfigでそのファイルを含む プロジェクトを指定してください。
vue-tsc から移行する
| 現在のコマンド | Vize での書き方 |
|---|---|
vue-tsc --noEmit |
vize check |
vue-tsc -p tsconfig.app.json --noEmit |
vize check --tsconfig tsconfig.app.json |
vue-tsc --declaration --emitDeclarationOnly |
vize check --declaration --declaration-dir dist/types |
| Vue - Official 拡張機能の診断 | typecheck を有効にした Vize の言語サーバー |
vue-tsc は JavaScript 版の TypeScript コンパイラーで動きますが、Vize は TypeScript 7 のネイティブ
コンパイラー(Go 実装、Project Corsa)で動きます。計測した差は
型チェッカーのベンチマークを参照してください。
細かなケースでは診断が異なることがあるため、移行ガイドの手順どおり、切り替える前に
結果を比べてください。
診断を調べる
Vize は各 SFC を仮想 TypeScript に変換してからチェックします。診断がおかしいと感じたら、生成された コードを確認してください。
vize check --show-virtual-ts src/components/Counter.vue
--save-virtual-ts-for <file> はコンポーネントの隣にファイルとして保存し、--profile は処理時間と
すべての仮想ファイルを node_modules/.vize に書き込みます。不具合を報告するときは
この出力を添えてください。
大きなプロジェクトでの速度
vize check は import グラフの独立した部分を複数のネイティブ TypeScript プロセスに分けて処理し、
プロセス数は CPU とファイル数から自動で決めます。メモリが少ない場合や順序を固定したい場合は、
1 プロセスで実行してください。
vize check --servers 1
プロファイルと調整の詳細は型チェックのパフォーマンスを参照してください。 開発中に何度も実行する場合は、サーバーを起動したままにしてチェックを接続できます(Unix のみ)。
vize check-server --socket /tmp/vize-check.sock
vize check --socket /tmp/vize-check.sock src
実験的な tsrs バックエンドを試す
Vize は tsrs を、チェック、型情報を使う lint ルール、
エディター機能のネイティブ TypeScript ランタイムとして利用できます。tsrs が TypeScript 7.1 の
開発版に追従しており、言語サーバーと Node API が upstream で未完成または不安定とされているため、
この連携は実験的です。
プロジェクトに tsrs をインストールし、ランチャーを明示的に指定します。
vp install -D tsrs
vize check --tsrs-path node_modules/.bin/tsrs
共有設定では次のように指定できます。
export default defineConfig({
vue: {
typeChecker: {
tsrsPath: "node_modules/.bin/tsrs",
},
},
});
TSRS_PATH と TSRS_EXECUTABLE も利用できます。プラットフォーム用バイナリーがあれば、Vize は
JavaScript ランチャーをそのバイナリーへ解決するため、Vize の単体実行ファイルからチェッカーを
起動するときに Node.js は不要です。TypeScript の診断結果はコンパイラーのバージョン差で変わるため、
評価中は tsrs のバージョンを固定してください。
現在、Vize は tsrs のコンパイラーと --lsp プロトコルを利用します。upstream の --init と
--showConfig はこの連携の対象外で、tsrs 0.18.0 は Windows と Intel macOS 向けのネイティブ
パッケージを公開していません。CI に採用する前に、CLI とエディターの診断を既定バックエンドと
比較してください。
関連ページ
- CLI リファレンス:
vize check - エディターで型エラーを表示する言語サーバー
- 同じチェッカーを使う型情報を使う lint ルール
- JSX と TSX の型チェック