I have an endpoints.ts file, shared between client/server, which has something like:
export type Endpoints = {
createProduct: {
path: '/api/products.json';
method: 'POST';
clientSends: { name: string };
serverResponds: ProductJSON;
};
}
The client can do `makeRequest('createProduct', ...)` and the Express server can use `registerEndpoint('createProduct', ...)` which must adhere to the schema defined above.TypeScript's structural typing helps a lot here.
Of course, I can "lose" typing through things like raw SQL queries (working on a mini db helper library to help with that), but so I'll have to validate that the endpoints return what they say they do through tests (probs using io-ts).
I'm just getting started (coming from Rails). Not sure what the "correct" way to do this is, but my approach works so far. Would also be nice to have a generic way to create REST endpoints for a given resource, but meh.
[1]: https://www.executeprogram.com/blog/porting-to-typescript-so...