ShanaMaid / route-type-compiler

Compile Route Type for Typescript

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Route Type Compiler

Compiler d.ts for route file on server side, then use the d.ts for you request on client side!

It's pretty useful to get type protect in restful http communication

Usage

1.In the server side, we have a route like this:

import {Controller, HttpMethod, route} from 'koa-decorator';
import ITodo from '@server/declaration/Todo';
import {Context} from 'koa';

@route('/demo')
export default class DemoCtrl extends Controller {

  @route('/', HttpMethod.GET)
  async alive(): Promise<{text: string}> {
    return {text: 'hello world'};
  }

  /**
   * 使用原生 koa 返回数据
   */
  @route('/koa', HttpMethod.GET)
  async koa(ctx: Context) {
    ctx.body = '123';
  }

  @route('/error/path/somepath', HttpMethod.GET, other)
  async error(): Promise<ITodo[]> {
    throw {
      code: 12345,
      msg: '出错了',
      data: {
        userId: 'Tom',
      },
    };
  }

  @route('/koa', HttpMethod.POST)
  async koaPost(ctx: Context) {
    const data = ctx.request.body;
    
    return {
      koa: 'fun in koa',
      data,
    }
  }
}

2. Compile the d.ts for the route file dependent on path and method type

route.d.ts

/*
* Autogenerated by Route Type Compiler (1.2.0)
*
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
*/
/* tslint:disable */

import ApiDemo from '../route/api/demo';
import Demo from '../route/demo';

declare module 'test' {
  const apiDemo: ApiDemo;
  const demo: Demo;
  export interface IGetRoute {
    'api/demo/': ReturnType<typeof apiDemo.alive >;
    'api/demo/koa': ReturnType<typeof apiDemo.koa >;
    'api/demo/error/path/somepath': ReturnType<typeof apiDemo.error >;
    '/demo/': ReturnType<typeof demo.alive >;
    '/demo/koa': ReturnType<typeof demo.koa >;
    '/demo/error/path/somepath': ReturnType<typeof demo.error >
  }
  export interface IPostRoute {
    'api/demo/koa': ReturnType<typeof apiDemo.koaPost >;
    '/demo/koa': ReturnType<typeof demo.koaPost >
  }
}

3.Then test module have all the route file type, use test module on client side.

About

Compile Route Type for Typescript


Languages

Language:TypeScript 89.9%Language:JavaScript 10.1%