What is typia?
Typia is a TypeScript library that provides runtime type checking, validation, and serialization/deserialization capabilities. It aims to enhance type safety and runtime validation for TypeScript applications.
What are typia's main functionalities?
Runtime Type Checking
This feature allows you to perform runtime type checking to ensure that a value matches a specified TypeScript type. The code sample demonstrates how to check if a value is a string at runtime.
const isString = typia.is<string>(value);
Validation
Typia provides validation capabilities to ensure that data conforms to a specified type. The code sample shows how to validate an object against a TypeScript type, returning a result that indicates whether the data is valid.
const validationResult = typia.validate<MyType>(data);
Serialization/Deserialization
Typia can serialize TypeScript objects to JSON strings and deserialize JSON strings back to TypeScript objects, ensuring type safety throughout the process. The code sample demonstrates both serialization and deserialization.
const jsonString = typia.stringify<MyType>(data); const dataObject = typia.parse<MyType>(jsonString);
Other packages similar to typia
io-ts
io-ts is a runtime type system for IO decoding/encoding in TypeScript. It provides similar functionality to typia in terms of runtime type checking and validation. However, io-ts uses a functional programming approach and is more focused on decoding and encoding data.
zod
Zod is a TypeScript-first schema declaration and validation library. It offers similar validation and type-checking capabilities as typia but with a more declarative API for defining schemas. Zod is known for its simplicity and ease of use.
class-validator
Class-validator is a library for validating TypeScript class objects. It provides decorators for defining validation rules directly in class definitions. While it focuses on class-based validation, typia offers a broader range of type-related utilities.
Typia

export function is<T>(input: unknown | T): input is T;
export function assert<T>(input: unknown | T): T;
export function validate<T>(input: unknown | T): IValidation<T>;
export function equals<T>(input: unknown: T): input is T;
export function assertEquals<T>(input: unknown | T): T;
export function validateEquals<T>(input: unknown | T): IValidation<T>;
export function application<T>(): IJsonApplication;
export function assertParse<T>(input: string): T;
export function assertStringify<T>(input: T): string;
typia
is a transformer library of TypeScript, supporting below features:
- Super-fast Runtime Validators
- Safe JSON parse and fast stringify functions
- JSON schema generator
All functions in typia
require only one line. You don't need any extra dedication like JSON schema definitions or decorator function calls. Just call typia
function with only one line like typia.assert<T>(input)
.
Also, as typia
performs AOT (Ahead of Time) compilation skill, its performance is much faster than other competitive libaries. For an example, when comparing validate function is()
with other competitive libraries, typia
is maximum 15,000x times faster than class-validator
.
%20Core(TM)%20i5-1135G7%20%40%202.40GHz/images/is.svg)
Measured on Intel i5-1135g7, Surface Pro 8
Setup
Setup Wizard
npx typia setup
Just type npx typia setup
, that's all.
After the setup, you can compile typia
utilized code by using ttsc
(ttypescript
) command. If you want to run your TypeScript file directly through ts-node
, add -C ttypescript
argument like below:
Manual Setup
If you want to install and setup typia
manually, read Guide Documents - Setup.
vite
When you want to setup typia
on your frontend project with vite
, just configure vite.config.ts
like below.
For reference, don't forget setting up before.
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import typescript from "@rollup/plugin-typescript";
import ttsc from "ttypescript";
export default defineConfig({
plugins: [
react(),
typescript({
typescript: ttsc,
})
]
});
Features

In here README documents, only summarized informations are provided.
For more details, please refer to the Guide Documents (wiki).
- Runtime Validators
- Enhanced JSON
Runtime Validators
export function is<T>(input: T | unknown): input is T;
export function assert<T>(input: T | unknown): T;
export function validate<T>(input: T | unknown): IValidation<T>;
export function equals<T>(input: T | unknown): boolean;
export function assertEquals<T>(input: T | unknown): T;
export function validateEquals<T>(input: T | unknown): IValidation<T>;
export function createIs<T>(): (input: unknown) => T;
export function createAssert<T>(): (input: unknown) => T;
export function createValidate<T>(): (input: unknown) => IValidation<T>;
export function createEquals<T>(): (input: unknown) => boolean;
export function createAssertEquals<T>(): (input: unknown) => T;
export function createValidateEquals<T>(): (input: unknown) => IValidation<T>;
typia
supports three type of validator functions:
is()
: returns false
if not matched with the type T
assert()
: throws a TypeGuardError
when not matched
validate()
Also, if you want more strict validator functions that even do not allowing superfluous properties not written in the type T
, you can use those functions instead; equals()
, assertEquals()
, validateEquals()
. Otherwise you want to create resuable validator functions, you can utilize factory functions like createIs()
instead.
When you want to add special validation logics, like limiting range of numeric values, you can do it through comment tags. If you want to know about it, please visit the Guide Documents (Features > Runtime Validators > Comment Tags).
Enhanced JSON
export function application<
Types extends unknown[],
Purpose extends "swagger" | "ajv" = "swagger",
Prefix extends string = Purpose extends "swagger"
? "#/components/schemas"
: "components#/schemas",
>(): IJsonApplication;
export function isParse<T>(input: string): T | null;
export function assertParse<T>(input: string): T;
export function validateParse<T>(input: string): IValidation<T>;
export function stringify<T>(input: T): string;
export function isStringify<T>(input: T): string | null;
export function assertStringify<T>(input: T): string;
export function validateStringify<T>(input: T): IValidation<string>;
export function createAssertParse<T>(): (input: string) => T;
export function createAssertStringify<T>(): (input: T) => string;
typia
supports enhanced JSON functions.
application()
: generate JSON schema with only one line
- you can complement JSON schema contents through comment tags
assertParse()
: parse JSON string safely with type validation
isStringify()
: maximum 10x faster JSON stringify fuction even type safe

Measured on AMD R7 5800H
Appendix
Nestia
https://github.com/samchon/nestia
Automatic SDK
and Swagger
generator for NestJS
, evolved than ever.
nestia
is an evolved SDK
and Swagger
generator, which analyzes your NestJS
server code in the compilation level. With nestia
and compilation level analyzer, you don't need to write any swagger or class-validator decorators.
Reading below table and example code, feel how the "compilation level" makes nestia
stronger.
Pure DTO interface | ✔ | ✔ | ❌ |
Description comments | ✔ | ✔ | ❌ |
Simple structure | ✔ | ✔ | ✔ |
Generic type | ✔ | ✔ | ❌ |
Union type | ✔ | ✔ | ▲ |
Intersection type | ✔ | ✔ | ▲ |
Conditional type | ✔ | ▲ | ❌ |
Auto completion | ✔ | ❌ | ❌ |
Type hints | ✔ | ❌ | ❌ |
5x faster JSON.stringify() | ✔ | ❌ | ❌ |
Ensure type safety | ✅ | ❌ | ❌ |
import api from "@samchon/shopping-api";
import { IPage } from "@samchon/shopping-api/lib/structures/IPage";
import { ISale } from "@samchon/shopping-api/lib/structures/ISale";
import { ISaleArticleComment } from "@samchon/shopping-api/lib/structures/ISaleArticleComment";
import { ISaleQuestion } from "@samchon/shopping-api/lib/structures/ISaleQuestion";
export async function trace_sale_question_and_comment
(connection: api.IConnection): Promise<void>
{
const index: IPage<ISale.ISummary> = await api.functional.shoppings.sales.index
(
connection,
"general",
{ limit: 100, page: 1 }
);
const sale: ISale = await api.functional.shoppings.sales.at
(
connection,
index.data[0].id
);
console.log("sale", sale);
const question: ISaleQuestion = await api.functional.shoppings.sales.questions.store
(
connection,
"general",
sale.id,
{
title: "How to use this product?",
body: "The description is not fully enough. Can you introduce me more?",
files: []
}
);
console.log("question", question);
const comment: ISaleArticleComment = await api.functional.shoppings.sales.comments.store
(
connection,
"general",
sale.id,
question.id,
{
body: "p.s) Can you send me a detailed catalogue?",
anonymous: false
}
);
console.log("comment", comment);
}
Nestia-Helper
https://github.com/samchon/nestia-helper
Helper library of NestJS
, using this typia
.
nestia-helper
is a helper library of NestJS
, which boosts up the JSON.stringify()
speed 5x times faster about the API responses, automatically. Also, nestia-helper
supports automatic validation of request body, that is maximum 15,000x times faster than legacy class-validator
too.
import helper from "nestia-helper";
import * as nest from "@nestjs/common";
@nest.Controller("bbs/articles")
export class BbsArticlesController
{
@helper.TypedRoute.Get()
public store(
@helper.TypedBody() input: IBbsArticle.IStore
): Promise<IBbsArticle>;
}