You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
![]() |
5 years ago | |
---|---|---|
.. | ||
lib | 5 years ago | |
node_modules/@types/hapi__joi | 5 years ago | |
.prettierignore | 5 years ago | |
.prettierrc.js | 5 years ago | |
README.md | 5 years ago | |
azure-pipelines.yml | 5 years ago | |
package.json | 5 years ago |
README.md
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