TypeScript

We use TypeScript to statically type-check and build our frontend.

Nuxt integration

We use typescript that is bundled with Nuxt since 2.5.0 releasearrow-up-right.

So do not install anything rather than nuxt and @nuxt/typescript. And it just works.

tsconfig.json

You can modify your ts configuration inside this file. Read more about useful options herearrow-up-right.

Declaration files

We use client/shims/*.d.ts files to store several declarationsarrow-up-right that are required for our app. Like:

  • @nuxt/axios that adds $axios property to vue and vuex

  • $style property on Vue components to support css-modules

  • global .vue files support for typescript

Supporting packages

We use nuxt-property-decoratorarrow-up-right to make our Vue components type-safe.

We also use vuex-classarrow-up-right to make our state, actions, mutations, and getters typed.

Runtime checks

Sometimes you want to make some runtime type checks: inside API methods, input validations, etc.

And since TypeScript types are only allowed during static check, we cannot use them in runtime.

So, we use io-tsarrow-up-right and io-ts-promisearrow-up-right to build and validate runtime types.

That's how building runtime types is done:

And then validating it:

That's a powerful combination of runtime and static type checking that enforces strong contracts on data exchange and keeping it up-to-date.

Last updated