untyped
从配置对象生成类型和 Markdown。
▶️ 查看 在线演练场
安装
# npm
npm i untyped
# yarn
yarn add untyped
# pnpm
pnpm add untyped
用法
首先,我们需要定义一个参考对象,该对象描述了类型、默认值以及一个 $resolve
方法(标准化器)。
const defaultPlanet = {
name: "earth",
specs: {
gravity: {
$resolve: (val) => parseFloat(val),
$default: "9.8",
},
moons: {
$resolve: (val = ["moon"]) => [].concat(val),
$schema: {
title: "planet moons",
},
},
},
};
API
resolveSchema
import { resolveSchema } from "untyped";
const schema = await resolveSchema(defaultPlanet);
输出
{
"properties": {
"name": {
"type": "string",
"default": "earth"
},
"specs": {
"properties": {
"gravity": {
"default": 9.8,
"type": "number"
},
"moons": {
"title": "planet moons",
"default": ["moon"],
"type": "array",
"items": [
{
"type": "string"
}
]
}
},
"type": "object"
}
},
"type": "object"
}
generateTypes
import { resolveSchema, generateTypes } from "untyped";
const types = generateTypes(await resolveSchema(defaultPlanet));
输出
interface Untyped {
/** @default "earth" */
name: string;
specs: {
/** @default 9.8 */
gravity: number;
/**
* planet moons
* @default ["moon"]
*/
moons: string[];
};
}
generateMarkdown
import { resolveSchema, generateMarkdown } from "untyped";
const markdown = generateMarkdown(await resolveSchema(defaultPlanet));
输出
# `name`
- **Type**: `string`
- **Default**: `"earth"`
# `specs`
## `gravity`
- **Type**: `number`
- **Default**: `9.8`
## `moons`
- **Type**: `array`
- **Default**: `["moon"]`
💻 开发
- 克隆此仓库
- 启用 Corepack 使用
corepack enable
(对于 Node.js 低于 16.10 版本请使用npm i -g corepack
) - 使用
pnpm install
安装依赖项 - 使用
pnpm dev
运行交互式测试 - 使用
pnpm web
启动演练场网站 - 在推送前使用
pnpm test
以确保所有测试和代码检查通过。
许可
感谢 @dominikschreiber 捐赠了包名。