Type declarations for a Vite app

Vite uses esbuild to transpile Typescript into Javascript and esbuild does not do any type checking.

To generate type declarations, you can use tsc:

tsc --declaration --emitDeclarationOnly

If you are building an application and want to check types only:

tsc --noEmit

Example package.json:

{
  "name": "vite-app",
  "version": "0.0.0",
  "scripts": {
    "build:types": "tsc --declaration --emitDeclarationOnly"
    "check-types": "tsc --noEmit"
  },
  "devDependencies": {
    "vite": "^2.7.2",
    "typescript": "^4.0.3"
  }
}

It's nice to seperate the type checking from the build because:

  • Vite (esbuild) builds faster without it (by 20-30x).
  • It allows you to only generate type declarations when you need to (eg, preparing to package your app).