从 Typescript 生成 Joi Schema types/interfaces
Generate Joi Schema from Typescript types/interfaces
我想从 Typescript 类型或接口生成一些 joi 模式对象。在我最初的搜索中,我发现了一些相反的事情(从 joi 模式生成 Typescript types/interfaces),并且 ts-interface-builder
+ ts-interface-checker
提供了一些基于 Typescript [= 创建运行时检查器的能力20=] 但仍然缺乏功能支持,以及一大堆使用 类 和装饰器 props/methods 来实现这一点的粗糙东西。
有什么东西可以生成这样的 joi 模式吗?或者更成熟的 interfaces/types 运行时检查替代方案? (在从数据库中提取数据并确保数据库的响应结构正确时很有用)
编辑:我想 this io-ts github issue.
上有一个关于此类问题的很好的讨论帖
我找到了令我满意的东西:typescript-is。
- 将您使用的打字稿编译器换成 ttypescript。不要调用
tsc
,而是调用 ttsc
.
- 将以下内容添加到
tsconfig.json
:
{
"compilerOptions": {
// Rest of ts config options...
"plugins": [
{
"transform": "typescript-is/lib/transform-inline/transformer"
}
]
}
}
$ npm install ttypescript typescript-is
- 现在您可以将以下内容添加到您的代码中:
import { is, assertType } from 'typescript-is'
interface SomeInterfaceOrType {
aString: string
}
// To do a simple boolean check, do the following:
const nonConformingObj = { somethingOutOfLeftField: 42 }
const conforms = is<SomeInterfaceOrType>(nonConformingObj) // false
// Or to get better details on what's wrong, do the following
const anotherNonConformer: unknown = { aString: 1337 }
try {
assertType<SomeInterfaceOrType>(anotherNonConformer)
} catch(error) {
console.log(error.message) // logs: "validation failed at anotherNonConformer.aString: expected a string"
}
在编译时,is<T>()
和 assertType<T>()
调用将转换为工作运行时检查。不一定是 JOI 模式,但仍然非常简洁,并且绝对适合我的用例。
我想从 Typescript 类型或接口生成一些 joi 模式对象。在我最初的搜索中,我发现了一些相反的事情(从 joi 模式生成 Typescript types/interfaces),并且 ts-interface-builder
+ ts-interface-checker
提供了一些基于 Typescript [= 创建运行时检查器的能力20=] 但仍然缺乏功能支持,以及一大堆使用 类 和装饰器 props/methods 来实现这一点的粗糙东西。
有什么东西可以生成这样的 joi 模式吗?或者更成熟的 interfaces/types 运行时检查替代方案? (在从数据库中提取数据并确保数据库的响应结构正确时很有用)
编辑:我想 this io-ts github issue.
上有一个关于此类问题的很好的讨论帖我找到了令我满意的东西:typescript-is。
- 将您使用的打字稿编译器换成 ttypescript。不要调用
tsc
,而是调用ttsc
. - 将以下内容添加到
tsconfig.json
:
{
"compilerOptions": {
// Rest of ts config options...
"plugins": [
{
"transform": "typescript-is/lib/transform-inline/transformer"
}
]
}
}
$ npm install ttypescript typescript-is
- 现在您可以将以下内容添加到您的代码中:
import { is, assertType } from 'typescript-is'
interface SomeInterfaceOrType {
aString: string
}
// To do a simple boolean check, do the following:
const nonConformingObj = { somethingOutOfLeftField: 42 }
const conforms = is<SomeInterfaceOrType>(nonConformingObj) // false
// Or to get better details on what's wrong, do the following
const anotherNonConformer: unknown = { aString: 1337 }
try {
assertType<SomeInterfaceOrType>(anotherNonConformer)
} catch(error) {
console.log(error.message) // logs: "validation failed at anotherNonConformer.aString: expected a string"
}
在编译时,is<T>()
和 assertType<T>()
调用将转换为工作运行时检查。不一定是 JOI 模式,但仍然非常简洁,并且绝对适合我的用例。