2个版本
0.1.1 | 2019年9月11日 |
---|---|
0.1.0 | 2019年9月11日 |
#1758 在 开发工具
每月 21 次下载
15KB
267 代码行
jddf-codegen
jddf-codegen
是一个命令行工具,可以从 JDDF 模式生成数据结构(例如结构体、类、接口等)。
使用方法
本节描述了如何针对每种语言使用 jddf-codegen
。
TypeScript
您可以使用
jddf-codegen
自动从您的 JDDF 模式生成 TypeScriptinterface
。这样,您就可以基于与您的其他代码库相同的真相源编写类型安全的代码了!
要在 TypeScript 代码库中使用 jddf-codegen
,建议您从 package.json
脚本调用 jddf-codegen
。例如,假设您的代码库像这样钩子
my-sweet-package // the root of your package
├── package.json // you'll invoke jddf-codegen in here
├── message.jddf.json // your JDDF schema
└── src // where you put your TypeScript code
├── index.ts // where you'll import the generated code from
└── message // a directory for containing generated code
└── index.ts // jddf-codegen will generate this file
在这个例子中,您的模式在 message.jddf.json
中。让我们假设它包含以下内容
{
"definitions": {
"user": {
"properties": {
"id": { "type": "string" },
"name": { "type": "string" }
}
}
},
"properties": {
"messageId": { "type": "string" },
"timestamp": { "type": "timestamp" },
"details": {
"discriminator": {
"tag": "type",
"mapping": {
"user_created": {
"properties": {
"user": { "ref": "user" }
}
},
"user_deleted": {
"properties": {
"userId": { "type": "string" }
}
}
}
}
}
}
}
然后您可以从 package.json
中的脚本调用 jddf-codegen
,如下所示
{
"scripts": {
"jddf-codegen": "jddf-codegen --ts-out=src/message -- message.jddf.json"
}
}
这将生成如下所示的代码
export interface User {
id: string;
name: string;
}
export interface AnalyticsDetailsUserDeleted {
type: "user_deleted";
userId: string;
}
export interface AnalyticsDetailsUserCreated {
type: "user_created";
user: User;
}
export interface Analytics {
messageId: string;
timestamp: string;
details: AnalyticsDetailsUserDeleted | AnalyticsDetailsUserCreated;
}
因此,您可以从手写的代码中这样导入
import { Analytics } from "./message";
// If you happen to know that `data` is JSON valid against a JDDF schema, then
// you can safely cast it into Analytics. And then you can enjoy type-safe and
// auto-completed code!
const data = JSON.parse(...);
const analyticsEvent = data as Analytics;
// This is type-checked now:
switch (analyticsEvent.details.type) {
case "user_deleted":
console.log("user deleted", analyticsEvent.details.userId);
case "user_created":
console.log("user created", analyticsEvent.details.user.id);
}
依赖关系
~2.3–3.5MB
~63K SLoC