TypeScript
Keq supports extending TypeScript Interface to provide users with complete type hints:
import type { KeqOperation } from "keq"
declare module keq {
export interface KeqOperations {
"/cats": {
get: {
requestParams: {}
requestQuery: {
breed: string
}
requestHeaders: {
Authorization: string
}
requestBody: {}
responseBody: {
id: string
breed: string
name: string
}
}
post: {
requestParams: {}
requestQuery: {}
requestHeaders: {
Authorization: string
}
requestBody: {
breed: string
name: string
}
responseBody: {
id: string
breed: string
name: string
}
}
}
"/cats/:id": {
put: {
requestParams: {
id: string
}
requestQuery: {}
requestHeaders: {
Authorization: string
}
requestBody: {
breed: string
name: string
}
responseBody: {
id: string
breed: string
name: string
}
}
}
}
}When using request, you'll have more elegant TypeScript hints:
import { request } from 'keq'
const cats = await request
.get('/cats')
.query('breed', 'siamese')
console.log(`My Cats: ${cats.map(cat => cat.name).join(',')}`)
await request
.put('/cats/:id')
.params<'strict'>({ id: 1 })
.send<'strict'>({
breed: 'siamese',
name: 'sweet'
})note
<'strict'> will strictly constrain parameters to fully conform to the definition in KeqOperations.
createRequest
createRequest can also create your own request with TypeScript:
import { createRequest, KeqOperations } from "keq";
export interface CatServiceOperations extends KeqOperations {
"/cats": {
get: {
requestParams: {};
requestQuery: {
breed: string;
};
requestHeaders: {
Authorization: string;
};
requestBody: {};
responseBody: {
id: string;
breed: string;
name: string;
};
};
};
}
const request = createRequest<CatServiceOperations>();