Skip to content
Transform TypeScript types to io-ts runtime validator codecs
TypeScript JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Configure CircleCI Sep 24, 2019
src Merge pull request #4 from juusaw/improve-docs Oct 6, 2019
.gitignore
README.md Document config options Oct 6, 2019
cli.js Fix extracting CLI args when running as script Oct 6, 2019
jest.config.js Add first test Sep 13, 2019
package.json Release 0.2.2 Oct 6, 2019
tsconfig.json Make config options available as command line arguments Oct 6, 2019
yarn.lock Make config options available as command line arguments Oct 6, 2019

README.md

ts-to-io

Converts TypeScript type and interface definitions into io-ts type validators.

Usage

As a script

$ npm install -g ts-to-io
$ ts-to-io file.ts

or

$ npx ts-to-io file.ts

From code

NOTE: The validator generation is not intended to be performed at runtime. You should first generate the validators locally and then include them in the program source.

import { getValidatorsFromString } from "ts-to-io"

const sourceString = `
  type Person = { name: string; age: number | null }
`

const validators = getValidatorsFromString(sourceString)

Configuration

ts-to-io supports the following config options

Key CLI opt Default Description
followImports --follow-imports false output codecs for types declared in imported files
includeHeader --no-include-header true omit io-ts import from the output

Supported types

Type Supported TypeScript codec
string string t.string
number number t.number
boolean boolean t.boolean
null null t.null
undefined undefined t.undefined
void void t.void
any, unknown any, unknown t.unknown
array Array<A> t.array(A)
record Record<K, A> t.record(K, A)
object type { name: string } t.type({ name: t.string })
interface interface I { name: string } t.type({ name: t.string })
literal 'ABC' t.literal('ABC')
partial Partial<{ name: string }> t.partial({ name: t.string })
readonly Readonly<A> -
readonly array ReadonlyArray<A> -
tuple [ A, B ] t.tuple([ A, B ])
tuple with rest [ A, B, ...C ] -
union A | B t.union([ A, B ])
intersection A & B t.intersection([ A, B ])
keyof keyof M -
recursive type type Node = { children: Node[] } -
function type fn = () => string t.Function
You can’t perform that action at this time.