Skip to content

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
  }
})

āφāϰ⧋ āĻĻ⧇āϖ⧁āύ:

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:

API-Specific Recipes ​

Using Vue with TypeScript has loaded