Since typescript types are lost as soon as the code is compiled to JS, the only option to check the type of an object at runtime is to use reflection. TS Schema attempts to solve that problem by creating a runtime representation of compile-time types.
-
Type-safe validation and encoding of data: The library uses the TypeScript type system to ensure that the validation and encoding of data are type-safe, meaning that it can catch type errors at compile time rather than runtime.
-
Zero-boilerplate and composable validation and encoding: The library provides a simple and intuitive API for defining schemas, which allows for the creation of complex schemas with minimal code. Additionally, schemas can be composed together to create even more complex schemas.
-
Support for various data types: The library provides support for a wide range of data types, including primitive types, union types, arrays, and objects.
-
Autogenerated schemas: The library provides a way to autogenerate schemas from TypeScript types, which eliminates the need for manual schema creation and ensures that the schema is always in sync with the data type.
npm install ttypescript tts-schema --save=dev
Consider the following Typescript Code:
import { Schema } from "ts-schema"
type User = {
name: string
age: number
email: string
}
const userSchema = Schema.macro.$derive!<User>()
The above TS file when compiled to JS would look something like this —
import { Schema } from "ts-schema"
const userSchema = Schema.object({ name: Schema.string, age: Schema.number, email: Schema.string })
What is happening behind the scenes is that the type information which was available in the Typescript realm is now available at runtime in the JS realm. This allows us to write powerful checks such as the built-in JSON Validator.
type User = {
name: string
id: number
email: string | null
}
const schema = Schema.macro.$derive!<User>()
const validUser = JSON.stringify({ name: "Ramen", id: 100, email: "ramen@porkchop.com" })
schema.fromJson(validUser) // {right: {name: "Ramen", id: 100, email: "ramen@porkchop.com"}}
const inValidUser = JSON.stringify({ firstName: "Ramen", age: 100, email: "ramen@porkchop.com" })
schema.fromJson(inValidUser) // {left: "Invalid JSON"}
- Type-safe validation and encoding of data
- Zero-boilerplate and composable validation and encoding
- Support for primitive types (string, number, boolean, etc.)
- Support for union types
- Support for arrays and objects
- Support for type references
If you found a bug or have an idea for a new feature, please open an issue. If you want to contribute, please open a pull request.
TS-Schema is released under the MIT License.