Что-то вроде этого - единственное, что я могу придумать, не используя третий промежуточный файл .d.ts
файл:
import * as express from 'express';
import {RequestHandler} from 'express';
const router = express.Router();
export const register = (v: any) => {
router.get('/', MakeGet.makeGetFoo(v));
router.put('/', MakePut.makePutFoo(v));
};
interface ApiDoc {
success: boolean
}
export namespace MakeGet{
export interface Response extends ApiDoc { // <--- i want to share this interface with front-end codebase
success: true
}
export const makeGetFoo = (v: any): RequestHandler => {
return (req, res, next) => {
res.json(<Response>{success: true});
};
};
}
export namespace MakePut {
export interface Response extends ApiDoc { // <--- i want to share this interface with front-end codebase
success: true
}
export const makePutFoo = (v:any): RequestHandler => {
return (req,res,next) => {
res.json(<Response>{success:true});
};
};
}
Недостатком являются все пространства имен и необходимость называть вещи так много.
Однако, если вы разместите здесь свои маршруты и информацию об api-doc, но разместите код контроллера в другом месте, вы можете сохранить эти файлы маршрутизатора разреженными и чистыми.
И так в другом файле (возможно, в вашем коде переднего плана), вы можете это:
import {MakeGet, MakePut} from './foo'
export interface Bar extends MakePut.Response{
}