joi2types
a converter transforms @hapi/joi schema into TypeScript types.
Quick start
Install
$ npm i joi2types @hapi/joi -S
use in your project
const Joi = require("@hapi/joi");
const joi2Types = require("joi2types").default;
// example for react-router-config
const schema = Joi.array().items(
Joi.object({
path: Joi.string().description("Any valid URL path"),
component: Joi.string().description(
"A React component to render only when the location matches."
),
redirect: Joi.string().description("navigate to a new location"),
exact: Joi.boolean().description(
"When true, the active class/style will only be applied if the location is matched exactly."
)
}).unknown()
);
(async () => {
const types = await joi2Types(schema, {
bannerComment: "/** comment for test */",
interfaceName: "IRoute"
});
console.log('types', types)
})();
It will convert into types as follows:
/** comment for test */
export type IRoute = {
/**
* Any valid URL path
*/
path?: string;
/**
* A React component to render only when the location matches.
*/
component?: string;
/**
* navigate to a new location
*/
redirect?: string;
/**
* When true, the active class/style will only be applied if the location is matched exactly.
*/
exact?: boolean;
[k: string]: any;
}[];
TODO
- [ ] support custom type definitions using
tsType