<div align='center'>
<h1>TypeBox</h1>
<p>JSON Schema Type Builder with Static Type Resolution for TypeScript</p>
<img src="https://github.com/sinclairzx81/typebox/blob/master/typebox.png?raw=true" />
<br />
<br />
[![npm version](https://badge.fury.io/js/%40sinclair%2Ftypebox.svg)](https://badge.fury.io/js/%40sinclair%2Ftypebox) [![GitHub CI](https://github.com/sinclairzx81/typebox/workflows/GitHub%20CI/badge.svg)](https://github.com/sinclairzx81/typebox/actions)
</div>
<a name="Install"></a>
## Install
#### Node
```bash
$ npm install @sinclair/typebox --save
```
#### Deno
```typescript
import { Static, Type } from 'https://deno.land/x/typebox/src/typebox.ts'
```
## Example
```typescript
import { Static, Type } from '@sinclair/typebox'
const T = Type.String() // const T = { "type": "string" }
type T = Static<typeof T> // type T = string
```
<a name="Overview"></a>
## Overview
TypeBox is a library that creates in-memory JSON Schema objects that can be statically inferred as TypeScript types. The schemas produced by this library are designed to match the static type checking rules of the TypeScript compiler. TypeBox allows one to create a unified type that can be both statically asserted by the TypeScript compiler and runtime asserted using standard JSON Schema validation.
TypeBox can be used as a simple tool to build up complex schemas or integrated into RPC or REST services to help validate JSON data received over the wire. TypeBox does not provide any JSON schema validation. Please use libraries such as AJV to validate schemas built with this library.
Requires TypeScript 4.3.5 and above.
License MIT
## Contents
- [Install](#Install)
- [Overview](#Overview)
- [Usage](#Usage)
- [Types](#Types)
- [Modifiers](#Modifiers)
- [Options](#Options)
- [Generic Types](#Generic-Types)
- [Reference Types](#Reference-Types)
- [Recursive Types](#Recursive-Types)
- [Extended Types](#Extended-Types)
- [Strict](#Strict)
- [Validation](#Validation)
- [OpenAPI](#OpenAPI)
<a name="Example"></a>
## Usage
The following demonstrates TypeBox's general usage.
```typescript
import { Static, Type } from '@sinclair/typebox'
//--------------------------------------------------------------------------------------------
//
// Let's say you have the following type ...
//
//--------------------------------------------------------------------------------------------
type T = {
id: string,
name: string,
timestamp: number
}
//--------------------------------------------------------------------------------------------
//
// ... you can express this type in the following way.
//
//--------------------------------------------------------------------------------------------
const T = Type.Object({ // const T = {
id: Type.String(), // type: 'object',
name: Type.String(), // properties: {
timestamp: Type.Integer() // id: {
}) // type: 'string'
// },
// name: {
// type: 'string'
// },
// timestamp: {
// type: 'integer'
// }
// },
// required: [
// "id",
// "name",
// "timestamp"
// ]
// }
//--------------------------------------------------------------------------------------------
//
// ... then infer back to the original static type this way.
//
//--------------------------------------------------------------------------------------------
type T = Static<typeof T> // type T = {
// id: string,
// name: string,
// timestamp: number
// }
//--------------------------------------------------------------------------------------------
//
// ... then use the type both as JSON schema and as a TypeScript type.
//
//--------------------------------------------------------------------------------------------
function receive(value: T) { // ... as a Type
if(JSON.validate(T, value)) { // ... as a Schema
// ok...
}
}
```
<a name="Types"></a>
## Types
The following table outlines the TypeBox mappings between TypeScript and JSON schema.
```typescript
┌────────────────────────────────┬─────────────────────────────┬────────────────────────────────┐
│ TypeBox │ TypeScript │ JSON Schema │
│ │ │ │
├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤
│ const T = Type.Any() │ type T = any │ const T = { } │
│ │ │ │
├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤
│ const T = Type.Unknown() │ type T = unknown │ const T = { } │
│ │ │ │
├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤
│ const T = Type.String() │ type T = string │ const T = { │
│ │ │ type: 'string' │
│ │ │ } │
│ │ │ │
├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤
│ const T = Type.Number() │ type T = number │ const T = { │
│ │ │ type: 'number' │
│ │ │ } │
│ │ │ │
├────────────────────────────────┼─────────────────────────────┼───────�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
树莓派(Raspberry Pi)是一款由英国树莓派基金会开发的小型、低成本、高度可定制化的单板计算机。它的体积仅相当于一张信用卡大小,但拥有完整的计算能力,适合各种创新项目和教育应用。自2012年初次发布以来,树莓派迅速风靡全球,深受学生、教师、爱好者和专业开发者的喜爱。 树莓派的核心是一颗强大的嵌入式处理器,配备内存和其他必要组件,支持多种Linux发行版,如Raspbian(现更名为Raspberry Pi OS)、Ubuntu、Arch Linux等。用户可以通过HDMI接口将其连接至显示器,通过USB接口接入键盘鼠标进行操作,也可通过Wi-Fi或以太网连接互联网。 这款微型电脑不仅可以执行基础的文档处理、电子表格运算等任务,还因其丰富的GPIO(通用输入输出)接口而特别适用于电子制作、物联网项目和自动化控制,例如构建媒体中心、智能家居系统、机器人平台、游戏机甚至复杂的工业控制设备等。 树莓派系列已经发展出多个版本,每一代产品在处理器速度、内存容量、接口类型等方面不断优化升级,同时保持了亲民的价格,使得更多人能够负担得起计算机技术的学习和实践成本。此外,围绕树莓派已建立起庞大的社区,共享着数不清的教程、软件资源和创意项目,极大地促进了STEM教育的发展和技术爱好者的探索精神。
资源推荐
资源详情
资源评论
收起资源包目录
基于树莓派和GPT实现的多功能语音家庭助手.zip (2000个子文件)
PubSubClient.cpp 23KB
prism-treeview.css 8KB
prism-previewers.css 5KB
prism-coy.css 4KB
prism-twilight.css 4KB
prism-solarizedlight.css 3KB
prism-funky.css 2KB
prism.css 2KB
prism-dark.css 2KB
prism-okaidia.css 2KB
prism-tomorrow.css 2KB
prism-line-highlight.css 2KB
prism-toolbar.css 2KB
prism-inline-color.css 1KB
prism-match-braces.css 815B
prism-line-numbers.css 782B
prism-command-line.css 683B
prism-show-invisibles.css 456B
prism-diff-highlight.css 379B
prism-unescaped-markup.css 359B
prism-wpd.css 235B
prism-autolinker.css 29B
PubSubClient.h 8KB
index.html 11KB
angular.html 690B
regexps.js 197KB
acorn_csp.js 132KB
acorn.js 130KB
js-yaml.js 108KB
index.js 86KB
named_entity_data.js 72KB
index.js 71KB
index.js 63KB
axios.js 62KB
fake-timers-src.js 57KB
prism.js 53KB
yargs-parser.js 46KB
loader.js 43KB
js-yaml.min.js 42KB
acorn_loose.js 41KB
prism-core.js 36KB
merge.js 35KB
index.js 35KB
_stream_readable.js 35KB
argument_parser.js 34KB
prism-sqf.js 33KB
prism-sqf.min.js 33KB
index.js 32KB
sbcs-data-generated.js 31KB
ScriptTransformer.js 29KB
Tokenizer.js 28KB
parse.js 27KB
dumper.js 27KB
response.js 26KB
index.js 25KB
expression.js 24KB
index.js 24KB
components.js 24KB
tokenize.js 22KB
index.js 22KB
args.js 22KB
formatter.js 22KB
_stream_writable.js 21KB
dbcs-codec.js 21KB
resolver_sync.js 20KB
prism-previewers.js 20KB
statement.js 20KB
resolver.js 19KB
watch.js 19KB
axios.min.js 19KB
CoverageReporter.js 18KB
prism-mel.js 17KB
prism-mel.min.js 16KB
index.js 16KB
prism-factor.js 16KB
ascii.js 16KB
typebox.js 16KB
range-tree.js 16KB
expression.js 15KB
legacyFakeTimers.js 15KB
index.js 15KB
action_container.js 15KB
index.js 15KB
simple.js 14KB
application.js 14KB
prism-vim.js 14KB
prism-vim.min.js 14KB
statement.js 14KB
prism-csharp.js 13KB
runTest.js 13KB
TestScheduler.js 13KB
index.js 13KB
identifier.js 13KB
utils.js 12KB
request.js 12KB
inliner.js 12KB
watchman.js 12KB
dependencies.js 12KB
walk.js 12KB
SearchSource.js 11KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
- qq_372027112024-06-06资源很赞,希望多一些这类资源。
JJJ69
- 粉丝: 6353
- 资源: 5918
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 项目采用YOLO V4算法模型进行目标检测,使用Deep SORT目标跟踪算法 .zip
- 针对实时视频流和静态图像实现的对象检测和跟踪算法 .zip
- 部署 yolox 算法使用 deepstream.zip
- 基于webmagic、springboot和mybatis的MagicToe Java爬虫设计源码
- 通过实时流协议 (RTSP) 使用 Yolo、OpenCV 和 Python 进行深度学习的对象检测.zip
- 基于Python和HTML的tb商品列表查询分析设计源码
- 基于国民技术RT-THREAD的MULTInstrument多功能电子测量仪器设计源码
- 基于Java技术的网络报修平台后端设计源码
- 基于Python的美食杰中华菜系数据挖掘与分析设计源码
- 基于Java与JavaScript混合技术的吉森摄影项目设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功