Using Vue with TypeScript â
āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻā§āϰ āĻŽāϤ⧠āĻāĻāĻāĻŋ āĻāĻžāĻāĻĒ āϏāĻŋāϏā§āĻā§āĻŽ āĻŦāĻŋāϞā§āĻĄ āĻāĻžāĻāĻŽā§ āϏā§āĻā§āϝāĻžāĻāĻŋāĻ āĻŦāĻŋāĻļā§āϞā§āώāĻŖā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻ āύā§āĻ āϏāĻžāϧāĻžāϰāĻŖ āϤā§āϰā§āĻāĻŋ āϏāύāĻžāĻā§āϤ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻāĻŋ āĻāϤā§āĻĒāĻžāĻĻāύ⧠āϰāĻžāύāĻāĻžāĻāĻŽ āϤā§āϰā§āĻāĻŋāϰ āϏāĻŽā§āĻāĻžāĻŦāύāĻžāĻā§ āĻšā§āϰāĻžāϏ āĻāϰā§, āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āϰāĻā§ āĻŦāĻĄāĻŧ āĻāĻāĻžāϰā§āϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§āϞāĻŋāϤ⧠āĻāϰāĻ āĻāϤā§āĻŽāĻŦāĻŋāĻļā§āĻŦāĻžāϏā§āϰ āϏāĻžāĻĨā§ āϰāĻŋāĻĢā§āϝāĻžāĻā§āĻāϰ āĻā§āĻĄā§āϰ āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧāĨ¤ āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻ IDE-āϤ⧠āĻāĻžāĻāĻĒ-āĻāĻŋāϤā§āϤāĻŋāĻ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ-āϏāĻŽā§āĻĒā§āϰā§āĻŖāϤāĻžāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĄā§āĻā§āϞāĻĒāĻŽā§āύā§āĻāĻāĻžāϰā§āϰ āĻāϰā§āĻā§āύāĻŽāĻŋāĻā§āϏāĻā§āĻ āĻāύā§āύāϤ āĻāϰā§āĨ¤
Vue āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻā§ āϞā§āĻāĻž āĻšāϝāĻŧ āĻāĻŦāĻ āĻĒā§āϰāĻĨāĻŽ āĻļā§āϰā§āĻŖā§āϰ āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āϏāĻŽāϰā§āĻĨāύ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤ āϏāĻŽāϏā§āϤ āĻ āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ Vue āĻĒā§āϝāĻžāĻā§āĻ āĻŦāĻžāύā§āĻĄāĻŋāϞ āĻāĻžāĻāĻĒ āĻĄāĻŋāĻā§āϞā§āϝāĻŧāĻžāϰā§āĻļāύā§āϰ āϏāĻžāĻĨā§ āĻāϏ⧠āϝāĻž āĻŦāĻžāĻā§āϏā§āϰ āĻŦāĻžāĻāϰ⧠āĻāĻžāĻ āĻāϰāĻž āĻāĻāĻŋāϤāĨ¤
Project Setup â
create-vue
, āĻ
āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ āĻĒā§āϰāĻā§āĻā§āĻ āϏā§āĻā§āϝāĻžāĻĢā§āϞā§āĻĄāĻŋāĻ āĻā§āϞ, āĻāĻāĻāĻŋ Vite-āĻāĻžāϞāĻŋāϤ āϏā§āĻā§āϝāĻžāĻĢā§āϞā§āĻĄ āĻāϰāĻžāϰ āĻŦāĻŋāĻāϞā§āĻĒāĻā§āϞāĻŋ āĻ
āĻĢāĻžāϰ āĻāϰ⧠, TypeScript-āĻĒā§āϰāϏā§āϤā§āϤ Vue āĻĒā§āϰāĻāϞā§āĻĒāĨ¤
Overview â
āĻāĻāĻāĻŋ Vite-āĻāĻŋāϤā§āϤāĻŋāĻ āϏā§āĻāĻāĻĒā§āϰ āϏāĻžāĻĨā§, dev āϏāĻžāϰā§āĻāĻžāϰ āĻāĻŦāĻ āĻŦāĻžāύā§āĻĄāϞāĻžāϰ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻā§āϰāĻžāύā§āϏāĻĒāĻŋāϞā§āĻļāύ āĻšāϝāĻŧ āĻāĻŦāĻ āĻā§āύ⧠āĻĒā§āϰāĻāĻžāϰ-āĻā§āĻāĻŋāĻ āĻāϰ⧠āύāĻžāĨ¤ āĻāĻāĻŋ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰ⧠āϝ⧠Vite dev āϏāĻžāϰā§āĻāĻžāϰāĻāĻŋ āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧāĻ āĻĻā§āϰā§āϤ āĻā§āĻŦāϞāύā§āϤ āĻĨāĻžāĻā§āĨ¤
āĻĄā§āĻā§āϞāĻĒāĻŽā§āύā§āĻā§āϰ āϏāĻŽāϝāĻŧ, āĻāĻŽāϰāĻž āĻāĻžāĻāĻĒ āϤā§āϰā§āĻāĻŋāϰ āĻŦāĻŋāώāϝāĻŧā§ āϤāĻžāϤā§āĻā§āώāĻŖāĻŋāĻ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻāĻžāϞ IDE āϏā§āĻāĻāĻĒ āĻāϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āĻāϰāĻžāϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻāĻŋāĻāĨ¤
SFC āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϞā§, āĻāĻŽāĻžāύā§āĻĄ āϞāĻžāĻāύ āĻāĻžāĻāĻĒ āĻā§āĻāĻŋāĻ āĻāĻŦāĻ āĻāĻžāĻāĻĒ āĻĄāĻŋāĻā§āϞā§āϝāĻŧāĻžāϰā§āĻļāύ āĻā§āύāĻžāϰā§āĻļāύā§āϰ āĻāύā§āϝ
vue-tsc
āĻāĻāĻāĻŋāϞāĻŋāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤vue-tsc
āĻšāϞtsc
āĻāϰ āĻāĻžāϰāĻĒāĻžāĻļā§ āĻāĻāĻāĻŋ āĻŽā§āĻĄāĻŧāĻ, āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻā§āϰ āύāĻŋāĻāϏā§āĻŦ āĻāĻŽāĻžāύā§āĻĄ āϞāĻžāĻāύ āĻāύā§āĻāĻžāϰāĻĢā§āϏāĨ¤ āĻāĻāĻŋ āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻĢāĻžāĻāϞāĻā§āϞāĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ Vue SFC āϏāĻŽāϰā§āĻĨāύ āĻāϰ⧠āϤāĻž āĻāĻžāĻĄāĻŧāĻž āĻāĻāĻŋ āĻŽā§āϞāϤtsc
āĻāϰ āĻŽāϤā§āĻ āĻāĻžāĻ āĻāϰā§āĨ¤ āĻāĻĒāύāĻŋ Vite dev āϏāĻžāϰā§āĻāĻžāϰā§āϰ āϏāĻŽāĻžāύā§āϤāϰāĻžāϞ⧠āĻāϝāĻŧāĻžāĻ āĻŽā§āĻĄā§vue-tsc
āĻāĻžāϞāĻžāϤ⧠āĻĒāĻžāϰā§āύ āĻ āĻĨāĻŦāĻž vite-plugin-checker āĻāϰ āĻŽāϤ⧠āĻāĻāĻāĻŋ Vite āĻĒā§āϞāĻžāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϝāĻž āĻāϞ⧠āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻāϰā§āĻŽā§ āĻĨā§āϰā§āĻĄ āĻā§āĻ.Vue CLI āĻāĻāĻžāĻĄāĻŧāĻžāĻ TypeScript āϏāĻŽāϰā§āĻĨāύ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§, āĻāĻŋāύā§āϤ⧠āĻāϰ āϏā§āĻĒāĻžāϰāĻŋāĻļ āĻāϰāĻž āĻšāϝāĻŧ āύāĻžāĨ¤ āĻĻā§āĻā§āύ āύā§āĻā§āϰ āύā§āĻ.
IDE Support â
āĻāĻŋāĻā§āϝā§āϝāĻŧāĻžāϞ āϏā§āĻā§āĻĄāĻŋāĻ āĻā§āĻĄ (VS āĻā§āĻĄ) TypeScript-āĻāϰ āĻāύā§āϝ āĻāϰ āĻĻā§āϰā§āĻĻāĻžāύā§āϤ āĻāĻāĻ-āĻ āĻĢ-āĻĻā§āϝ-āĻŦāĻā§āϏ āϏāĻŽāϰā§āĻĨāύā§āϰ āĻāύā§āϝ āĻĻā§āĻĸāĻŧāĻāĻžāĻŦā§ āϏā§āĻĒāĻžāϰāĻŋāĻļ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
Vue - āĻ āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ (āĻāĻā§ Volar) āĻšāϞ āĻ āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ VS āĻā§āĻĄ āĻāĻā§āϏāĻā§āύāĻļāύ āϝāĻž Vue SFC-āĻāϰ āĻŽāϧā§āϝ⧠TypeScript āϏāĻŽāϰā§āĻĨāύ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§, āϏāĻžāĻĨā§ āĻāϰāĻ āĻ āύā§āĻ āĻĻā§āϰā§āĻĻāĻžāύā§āϤ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āϰāϝāĻŧā§āĻā§āĨ¤
TIP
Vue - āĻ āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ āĻāĻā§āϏāĻā§āύāĻļāύ Vetur āĻĒā§āϰāϤāĻŋāϏā§āĻĨāĻžāĻĒāύ āĻāϰā§, Vue 2-āĻāϰ āĻāύā§āϝ āĻāĻŽāĻžāĻĻā§āϰ āĻĒā§āϰā§āĻŦāĻŦāϰā§āϤ⧠āĻ āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ VS āĻā§āĻĄ āĻāĻā§āϏāĻā§āύāĻļāύāĨ¤ āĻāĻĒāύāĻžāϰ āϝāĻĻāĻŋ āĻŦāϰā§āϤāĻŽāĻžāύ⧠Vetur āĻāύāϏā§āĻāϞ āĻāϰāĻž āĻĨāĻžāĻā§, āϤāĻžāĻšāϞ⧠āĻāĻāĻŋ āύāĻŋāώā§āĻā§āϰāĻŋāϝāĻŧ āĻāϰāϤ⧠āĻā§āϞāĻŦā§āύ āύāĻžāĨ¤ Vue 3 āĻĒā§āϰāĻāϞā§āĻĒā§āĨ¤
āĻāϝāĻŧā§āĻŦāϏā§āĻāϰā§āĻŽ āĻāĻāĻžāĻĄāĻŧāĻžāĻ TypeScript āĻāĻŦāĻ Vue āĻāĻāϝāĻŧā§āϰ āĻāύā§āϝ āĻāĻāĻ-āĻ āĻĢ-āĻĻā§āϝ-āĻŦāĻā§āϏ āϏāĻŽāϰā§āĻĨāύ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤ āĻ āύā§āϝāĻžāύā§āϝ JetBrains IDE āĻā§āϞāĻŋāĻ āϤāĻžāĻĻā§āϰ āϏāĻŽāϰā§āĻĨāύ āĻāϰā§, āĻšāϝāĻŧ āĻŦāĻžāĻā§āϏā§āϰ āĻŦāĻžāĻāϰ⧠āĻŦāĻž āĻāĻāĻāĻŋ āĻŦāĻŋāύāĻžāĻŽā§āϞā§āϝā§āϰ āĻĒā§āϞāĻžāĻāĻāύ āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§āĨ¤ 2023.2 āϏāĻāϏā§āĻāϰāĻŖ āĻ āύā§āϏāĻžāϰā§, WebStorm āĻāĻŦāĻ Vue āĻĒā§āϞāĻžāĻāĻāύ Vue āĻāĻžāώāĻž āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻāύā§āϝ āĻ āύā§āϤāϰā§āύāĻŋāϰā§āĻŽāĻŋāϤ āϏāĻŽāϰā§āĻĨāύ āϏāĻš āĻāϏā§āĨ¤ āĻāĻĒāύāĻŋ āϏā§āĻāĻŋāĻāϏ > āĻāĻžāώāĻž āĻāĻŦāĻ āĻĢā§āϰā§āĻŽāĻāϝāĻŧāĻžāϰā§āĻ > āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻ > Vue-āĻāϰ āĻ āϧā§āύ⧠āϏāĻŽāϏā§āϤ TypeScript āϏāĻāϏā§āĻāϰāĻŖā§ Volar āĻāύā§āĻāĻŋāĻā§āϰā§āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻāύā§āϝ Vue āĻĒāϰāĻŋāώā§āĻŦāĻž āϏā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻĄāĻŋāĻĢāϞā§āĻāϰā§āĻĒā§, Volar āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āϏāĻāϏā§āĻāϰāĻŖ 5.0 āĻāĻŦāĻ āĻāĻā§āĻāϤāϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāĻŦā§āĨ¤
Configuring tsconfig.json
â
create-vue
āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϏā§āĻā§āϝāĻžāĻĢā§āϞā§āĻĄ āĻāϰāĻž āĻĒā§āϰāĻā§āĻā§āĻā§āϰ āĻŽāϧā§āϝ⧠āĻĒā§āϰā§āĻŦ-āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻž tsconfig.json
āĻ
āύā§āϤāϰā§āĻā§āĻā§āϤ āĻĨāĻžāĻā§āĨ¤ āĻŦā§āϏ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύāĻāĻŋ @vue/tsconfig
āĻĒā§āϝāĻžāĻā§āĻā§ āĻŦāĻŋāĻŽā§āϰā§āϤ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĨ¤ āĻĒā§āϰāĻā§āĻā§āĻā§āϰ āĻāĻŋāϤāϰā§, āĻāĻŽāϰāĻž āĻĒā§āϰāĻāϞā§āĻĒ āϰā§āĻĢāĻžāϰā§āύā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŋ āϝāĻžāϤ⧠āĻŦāĻŋāĻāĻŋāύā§āύ āĻĒāϰāĻŋāĻŦā§āĻļā§ āĻā§āĻĄ āĻāϞāĻžāϰ āĻāύā§āϝ āϏāĻ āĻŋāĻ āĻĒā§āϰāĻāĻžāϰ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāĻž āϝāĻžāϝāĻŧ (āϝā§āĻŽāύ āĻ
ā§āϝāĻžāĻĒ āĻā§āĻĄ āĻāĻŦāĻ āĻā§āϏā§āĻ āĻā§āĻĄ āĻĨāĻžāĻāĻž āĻāĻāĻŋāϤ āĻŦāĻŋāĻāĻŋāύā§āύ āĻā§āϞā§āĻŦāĻžāϞ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ)āĨ¤
āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞāĻŋ tsconfig.json
āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāĻŋāĻā§ āĻāϞā§āϞā§āĻāϝā§āĻā§āϝ āĻŦāĻŋāĻāϞā§āĻĒā§āϰ āĻŽāϧā§āϝ⧠āϰāϝāĻŧā§āĻā§:
compilerOptions.isolatedModules
true
-āϤ⧠āϏā§āĻ āĻāϰāĻž āĻāĻā§ āĻāĻžāϰāĻŖ Vite TypeScript āĻā§āϰāĻžāύā§āϏāĻĒāĻŋāϞāĻŋāĻ āĻāϰāĻžāϰ āĻāύā§āϝ esbuild āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŦāĻ āĻāĻāĻ-āĻĢāĻžāĻāϞ āĻā§āϰāĻžāύā§āϏāĻĒāĻŋāϞ āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϰ āĻŦāĻŋāώāϝāĻŧāĨ¤compilerOptions.verbatimModuleSyntax
āĻšāϞisolatedModules
-āĻāϰ āĻāĻāĻāĻŋ āϏā§āĻĒāĻžāϰāϏā§āĻ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻāĻžāϞ āĻĒāĻāύā§āĻĻāĻ - āĻāĻāĻŋ@vue/tsconfig
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ Options API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ, āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻžāĻā§
compilerOptions.strict
āϏā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§true
(āĻ āĻĨāĻŦāĻž āĻ āύā§āϤāϤcompilerOptions.noImplicitThis
āϏāĻā§āώāĻŽ āĻāϰā§āύāĨ¤ , āϝāĻžstrict
āĻĢā§āϞā§āϝāĻžāĻā§āϰ āĻāĻāĻāĻŋ āĻ āĻāĻļ) āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻŦāĻŋāĻāϞā§āĻĒā§this
-āĻāϰ āĻāĻžāĻāĻĒ āĻā§āĻāĻŋāĻāϝāĻŧā§āϰ āϏā§āĻŦāĻŋāϧāĻž āύāĻŋāϤā§āĨ¤ āĻ āύā§āϝāĻĨāĻžāϝāĻŧthis
āĻāĻŋāĻā§any
āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻŖā§āϝ āĻāϰāĻž āĻšāĻŦā§āĨ¤āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻŦāĻŋāϞā§āĻĄ āĻā§āϞ⧠āϏāĻŽāĻžāϧāĻžāύāĻāĻžāϰ⧠āĻāĻĒāύāĻžāĻŽāĻā§āϞāĻŋ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰ⧠āĻĨāĻžāĻā§āύ, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ
@/*
āĻāĻĒāύāĻžāĻŽ āĻāĻāĻāĻŋcreate-vue
āĻĒā§āϰāĻā§āĻā§āĻā§ āĻĄāĻŋāĻĢāϞā§āĻāϰā§āĻĒā§ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻž āĻĨāĻžāĻā§, āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻžāĻā§ [compilerOptions.paths
](āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ TypeScript-āĻāϰ āĻāύā§āϝāĻ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§ https://www.typescriptlang.org/tsconfig#paths)āĨ¤āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ Vue-āĻāϰ āϏāĻžāĻĨā§ TSX āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻāĻžāύ, āϤāĻžāĻšāϞā§
compilerOptions.jsx
āϏā§āĻ āĻāϰā§āύ"āϏāĻāϰāĻā§āώāĻŖ āĻāϰā§āύ"
, āĻāĻŦāĻ āϏā§āĻ āĻāϰā§āύcompilerOptions.jsxImportSource
āĻĨā§āĻā§"vue"
āĨ¤
See also:
- āĻ āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāĻŽā§āĻĒāĻžāĻāϞāĻžāϰ āĻ āĻĒāĻļāύ āĻĄāĻā§āϏ
- āĻāϏāĻŦāĻŋāϞā§āĻĄ āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āϏāĻāĻāϞāύ āϏāϤāϰā§āĻāϤāĻž
Note on Vue CLI and ts-loader
â
Vue CLI-āĻāϰ āĻŽāϤ⧠āĻāϝāĻŧā§āĻŦāĻĒā§āϝāĻžāĻ-āĻāĻŋāϤā§āϤāĻŋāĻ āϏā§āĻāĻāĻĒāĻā§āϞāĻŋāϤā§, āĻŽāĻĄāĻŋāĻāϞ āĻā§āϰāĻžāύā§āϏāĻĢāϰā§āĻŽ āĻĒāĻžāĻāĻĒāϞāĻžāĻāύā§āϰ āĻ
āĻāĻļ āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻžāĻāĻĒ āĻā§āĻāĻŋāĻ āĻāϰāĻž āϏāĻžāϧāĻžāϰāĻŖ, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ ts-loader
āĻāϰ āϏāĻžāĻĨā§āĨ¤ āϝāĻžāĻāĻšā§āĻ, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĒāϰāĻŋāώā§āĻāĻžāϰ āϏāĻŽāĻžāϧāĻžāύ āύāϝāĻŧ āĻāĻžāϰāĻŖ āĻāĻžāĻāĻĒ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻāĻžāĻāĻĒ āĻā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻŽāĻĄāĻŋāĻāϞ āĻā§āϰāĻžāĻĢā§āϰ āĻā§āĻāĻžāύ āĻĒā§āϰāϝāĻŧā§āĻāύāĨ¤ āϏā§āĻŦāϤāύā§āϤā§āϰ āĻŽāĻĄāĻŋāĻāϞā§āϰ āϰā§āĻĒāĻžāύā§āϤāϰ āĻĒāĻĻāĻā§āώā§āĻĒāĻāĻŋ āĻāĻžāĻā§āϰ āĻāύā§āϝ āϏāĻ āĻŋāĻ āĻāĻžāϝāĻŧāĻāĻž āύāϝāĻŧāĨ¤ āĻāĻāĻŋ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āϏāĻŽāϏā§āϝāĻžāϰ āĻĻāĻŋāĻā§ āĻĒāϰāĻŋāĻāĻžāϞāĻŋāϤ āĻāϰā§:
ts-loader
āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻā§āĻ āĻĒā§āϏā§āĻ-āĻā§āϰāĻžāύā§āϏāĻĢāϰā§āĻŽ āĻā§āĻĄ āĻāĻžāĻāĻĒ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻāĻŋ āĻāĻāĻĄāĻŋāĻ āĻŦāĻžvue-tsc
āĻĨā§āĻā§ āĻāĻŽāϰāĻž āϝ⧠āϤā§āϰā§āĻāĻŋāĻā§āϞāĻŋ āĻĻā§āĻāĻŋ āϤāĻžāϰ āϏāĻžāĻĨā§ āϏāĻžāϰāĻŋāĻŦāĻĻā§āϧ āύāϝāĻŧ, āϝāĻž āϏāϰāĻžāϏāϰāĻŋ āĻā§āϏ āĻā§āĻĄā§ āĻĢāĻŋāϰ⧠āĻāϏā§āĨ¤āĻāĻžāĻāĻĒ āĻā§āĻāĻŋāĻ āϧā§āϰ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϝāĻāύ āĻāĻāĻŋ āĻāĻāĻ āĻĨā§āϰā§āĻĄ/āĻĒā§āϰāϏā§āϏ⧠āĻā§āĻĄ āĻā§āϰāĻžāύā§āϏāĻĢāϰāĻŽā§āĻļāύā§āϰ āϏāĻžāĻĨā§ āϏāĻā§āĻāĻžāϞāĻŋāϤ āĻšāϝāĻŧ, āϤāĻāύ āĻāĻāĻŋ āϏāĻŽāĻā§āϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύā§āϰ āĻŦāĻŋāϞā§āĻĄ āĻāϤāĻŋāĻā§ āĻāϞā§āϞā§āĻāϝā§āĻā§āϝāĻāĻžāĻŦā§ āĻĒā§āϰāĻāĻžāĻŦāĻŋāϤ āĻāϰā§āĨ¤
āĻāĻŽāĻžāĻĻā§āϰ āĻāϤāĻŋāĻŽāϧā§āϝā§āĻ āĻāϞāĻžāĻĻāĻž āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāϝāĻŧ āĻāĻŽāĻžāĻĻā§āϰ IDE-āϤ⧠āĻāĻžāĻāĻĒ āĻā§āĻāĻŋāĻ āĻāϞāĻā§, āϤāĻžāĻ āĻĄā§āĻ āĻāĻā§āϏāĻĒā§āϰāĻŋāϝāĻŧā§āύā§āϏā§āϰ āĻŦā§āϝāϝāĻŧ āĻŽāύā§āĻĨāϰ āĻšāϝāĻŧā§ āϝāĻžāĻāϝāĻŧāĻžāĻāĻž āĻāĻžāϞ⧠āĻā§āϰā§āĻĄ-āĻ āĻĢ āύāϝāĻŧāĨ¤
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻŦāϰā§āϤāĻŽāĻžāύ⧠Vue CLI āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ Vue 3 + TypeScript āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻā§āύ, āĻāĻŽāϰāĻž āĻĻā§āĻĸāĻŧāĻāĻžāĻŦā§ Vite-āĻ āϏā§āĻĨāĻžāύāĻžāύā§āϤāϰāĻŋāϤ āĻāϰāĻžāϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻāĻŋāĻāĨ¤ āĻāĻŽāϰāĻž āĻā§āϰāĻžāύā§āϏāĻĒāĻŋāϞ-āĻļā§āϧ⧠TS āϏāĻŽāϰā§āĻĨāύ āϏāĻā§āώāĻŽ āĻāϰāĻžāϰ āĻāύā§āϝ CLI āĻŦāĻŋāĻāϞā§āĻĒāĻā§āϞāĻŋāϤā§āĻ āĻāĻžāĻ āĻāϰāĻāĻŋ, āϝāĻžāϤ⧠āĻāĻĒāύāĻŋ āĻāĻžāĻāĻĒ āĻā§āĻāĻŋāĻāϝāĻŧā§āϰ āĻāύā§āϝ vue-tsc
-āĻ āϏā§āϝā§āĻāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
General Usage Notes â
defineComponent()
â
āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻāĻŽā§āĻĒā§āύā§āύā§āĻ āĻ
āĻĒāĻļāύā§āϰ āĻ
āĻā§āϝāύā§āϤāϰ⧠āĻĒā§āϰāĻāĻžāϰāĻā§āϞāĻŋ āĻ
āύā§āĻŽāĻžāύ āĻāϰāϤ⧠āĻĻāĻŋāϤā§, āĻāĻŽāĻžāĻĻā§āϰ āĻāϰ āϏāĻžāĻĨā§ āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋ āϏāĻāĻā§āĻāĻžāϝāĻŧāĻŋāϤ āĻāϰāϤ⧠āĻšāĻŦā§defineComponent()
:
ts
import { defineComponent } from 'vue'
export default defineComponent({
// type inference enabled
props: {
name: String,
msg: { type: String, required: true }
},
data() {
return {
count: 1
}
},
mounted() {
this.name // type: string | undefined
this.msg // type: string
this.count // type: number
}
})
<script setup>
āĻāĻžāĻĄāĻŧāĻž Composition API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ defineComponent()
setup()
-āĻ āĻĒāĻžāϏ āĻāϰāĻž āĻĒā§āϰāĻĒāϏ āĻ
āύā§āĻŽāĻžāύ āĻāϰāĻžāĻ āϏāĻŽāϰā§āĻĨāύ āĻāϰā§:
ts
import { defineComponent } from 'vue'
export default defineComponent({
// type inference enabled
props: {
message: String
},
setup(props) {
props.message // type: string | undefined
}
})
āĻāϰ⧠āĻĻā§āĻā§āύ:
- āĻāϝāĻŧā§āĻŦāĻĒā§āϝāĻžāĻ āĻā§āϰāĻŋāĻļā§āĻāĻŋāĻ-āĻ āύā§āĻ
defineComponent
āĻāϰ āĻāύā§āϝ āĻāĻžāĻāĻĒ āĻā§āϏā§āĻ
TIP
defineComponent()
āĻĒā§āϞā§āĻāύ āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻā§ āϏāĻāĻā§āĻāĻžāϝāĻŧāĻŋāϤ āĻāĻŽā§āĻĒā§āύā§āύā§āĻāĻā§āϞāĻŋāϰ āĻāύā§āϝ āĻāĻžāĻāĻĒ āĻāύāĻĢāĻžāϰā§āύā§āϏ āϏāĻā§āώāĻŽ āĻāϰā§āĨ¤
Usage in Single-File Components â
SFC-āϤ⧠TypeScript āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤā§, <script>
āĻā§āϝāĻžāĻā§ lang="ts"
āĻ
ā§āϝāĻžāĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āϝā§āĻ āĻāϰā§āύāĨ¤ āϝāĻāύ lang="ts"
āĻāĻĒāϏā§āĻĨāĻŋāϤ āĻĨāĻžāĻā§, āϤāĻāύ āϏāĻŽāϏā§āϤ āĻā§āĻŽāĻĒā§āϞā§āĻ āĻāĻā§āϏāĻĒā§āϰā§āĻļāύ āĻāĻ ā§āϰ āĻāĻžāĻāĻĒ āĻā§āĻāĻŋāĻ āĻāĻĒāĻā§āĻ āĻāϰā§āĨ¤
vue
<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
data() {
return {
count: 1
}
}
})
</script>
<template>
<!-- type checking and auto-completion enabled -->
{{ count.toFixed(2) }}
</template>
lang="ts"
can also be used with <script setup>
:
vue
<script setup lang="ts">
// TypeScript enabled
import { ref } from 'vue'
const count = ref(1)
</script>
<template>
<!-- type checking and auto-completion enabled -->
{{ count.toFixed(2) }}
</template>
TypeScript in Templates â
āϝāĻāύ <script lang="ts">
āĻŦāĻž <script setup lang="ts">
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧ āϤāĻāύ <template>
āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻāĻā§ āĻŦāĻžāĻāύā§āĻĄāĻŋāĻ āĻāĻā§āϏāĻĒā§āϰā§āĻļāύ⧠āϏāĻŽāϰā§āĻĨāύ āĻāϰā§āĨ¤ āĻāĻāĻŋ āĻāĻŽāύ āĻā§āώā§āϤā§āϰ⧠āĻĻāϰāĻāĻžāϰ⧠āϝā§āĻāĻžāύ⧠āĻāĻĒāύāĻžāĻā§ āĻā§āĻŽāĻĒā§āϞā§āĻ āĻāĻā§āϏāĻĒā§āϰā§āĻļāύ⧠āĻāĻžāĻāĻĒ āĻāĻžāϏā§āĻāĻŋāĻ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
āĻāĻāĻžāύ⧠āĻāĻāĻāĻŋ āĻāϞā§āĻĒāĻŋāϤ āĻāĻĻāĻžāĻšāϰāĻŖ:
vue
<script setup lang="ts">
let x: string | number = 1
</script>
<template>
<!-- error because x could be a string -->
{{ x.toFixed(2) }}
</template>
āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāύāϞāĻžāĻāύ āĻāĻžāĻāĻĒ āĻāĻžāϏā§āĻ āĻĻāĻŋāϝāĻŧā§ āĻāĻžāĻ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§:
vue
<script setup lang="ts">
let x: string | number = 1
</script>
<template>
{{ (x as number).toFixed(2) }}
</template>
TIP
Vue CLI āĻŦāĻž āĻāĻāĻāĻŋ āĻāϝāĻŧā§āĻŦāĻĒā§āϝāĻžāĻ-āĻāĻŋāϤā§āϤāĻŋāĻ āϏā§āĻāĻāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϞā§, āĻā§āĻŽāĻĒā§āϞā§āĻ āĻāĻā§āϏāĻĒā§āϰā§āĻļāύ⧠TypeScript-āĻāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ vue-loader@^16.8.0
āĨ¤
Usage with TSX â
Vue also supports authoring components with JSX / TSX. Details are covered in the Render Function & JSX guide.
Generic Components â
Generic components are supported in two cases:
- In SFCs:
<script setup>
with thegeneric
attribute - Render function / JSX components:
defineComponent()
's function signature
API-Specific Recipes â
GitHub-āĻ āĻāĻ āĻĒā§āώā§āĻ āĻžāĻāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻāϰā§āύ