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