🎩 Use Your TypeScript definitions at runtime. Powered by Manta Style.
- With Yarn
 
yarn global add magic-type- With NPM
 
npm install -g magic-typeYou could also use Magic Type locally as well.
Let's take the following code as an example.
// typings/api.ts
export type MyAPIRequest = {
  time: number;
  input: string;
};Usage: magictype [options]
Options:
  -V, --version          output the version number
  -i --inputFile <file>  The entrypoint of files to be compiled
  -o --outputDir <dir>   The output directory of compiled files
  -c --cjs               Transpile modules to CommonJS (Otherwise it will output ES modules)
  -h, --help             output usage information
import { MyAPIRequest } from "./api";
// Use Magic Types as normal TypeScript types
type MyType = {
  key: MyAPIRequest;
};
// Use Magic Type at Runtime
// Check if user input matches MyAPIRequest
function checkMyInput(input: any) {
  return MyAPIRequest.validate(input);
}
// Format user input to match MyAPIRequest
function formatMyInput(input: any) {
  return MyAPIRequest.format(input);
}
// Generate a mock MyAPIRequest data
function getMockData() {
  return MyAPIRequest.deriveLiteral([]).mock();
}- 
Developer Experience with TypeScript's type guard

 
Please be noted there's no warnings against unsupported syntax yet (And Magic Type may crash as well). Please kindly check by yourself.
extendskeyword ininterfacedeclaration will be ignored.- Union (
A | B) and intersection(A & B) on index signatures are not supported. - Functions
 inferkeywordReturnType<T>andInstanceType<T>are not supported due to unsupportedinferkeyword and functions.
Magic Type is MIT licensed

