We use shield() to guarantee the type of telefunction arguments. (As explained in RPC,
telefunctions are public and need protection.)
If we use TypeScript, then Telefunc automaticaly defines shield(), see TypeScript - Automatic.
TypeScript - Automatic
If we use TypeScript, then Telefunc automatically generates shield() for each telefunction.
In other words: telefunction argument types are automatically validated at runtime:
With Telefunc, not only can we seamlessly re-use types across our frontend and backend code, but we also get automatic type-safety at runtime. If we use a TypeScript ORM (e.g. Prisma) or SQL builder (e.g. Kysely and others), then we get end-to-end type safety all the way from database to frontend.
Telefunc's automatic shield() generation only works for stacks that transpile server-side code (Next.js, Vite, Vike, SvelteKit, Nuxt, etc.).
For stacks that don't transpile server-side code (e.g. React Native, CRA, Parcel), we need to define shield() manually ourselves: see TypeScript - Manual.
TypeScript - Manual
If we define shield() manually (instead of using Telefunc's automatic shield() generator as described in TypeScript - Automatic), then note that we don't need to define the arguments type twice:
Note that the following doesn't work:
Common types
Examples showcasing the most common shield() types: