JavaScript/TypeScript
输出布局
JavaScript/TypeScript 输出为每个 Schema 生成一个 .ts 文件,例如:
<javascript_out>/addressbook.ts
当 Schema 包含服务时,JavaScript 还可以生成服务配套代码:
<javascript_out>/addressbook_grpc.ts(使用--grpc生成)<javascript_out>/addressbook_grpc_web.ts(使用--grpc-web生成)
类型生成
消息生成字段名称为 camelCase 的 export interface 声明:
export interface Person {
name: string;
id: number;
phones: PhoneNumber[];
pet?: Animal | null;
}
枚举生成 export enum 声明:
export enum PhoneType {
MOBILE = 0,
HOME = 1,
WORK = 2,
}
联合生成带 case 枚举的可辨识联合:
export enum AnimalCase {
DOG = 1,
CAT = 2,
}
export type Animal =
{ case: AnimalCase.DOG; value: Dog } | { case: AnimalCase.CAT; value: Cat };
Schema 辅助方法
每个生成的模型文件都会导出用于自定义 Fory 实例的注册辅助方法和根序列化辅助方法。
公共 API 如下:
import type Fory, { Serializer } from "@apache-fory/core";
export function registerAddressbookTypes(fory: Fory): {
person: {
serialize: (value: Person | null) => Uint8Array;
deserialize: (bytes: Uint8Array) => Person;
serializer: Serializer;
};
};
export const serializePerson: (value: Person | null) => Uint8Array;
export const deserializePerson: (bytes: Uint8Array) => Person;
导入的 Schema 模块由 registerXxxTypes(fory) 自动注册。生成的默认序列化路径请使用
serializeX 和 deserializeX。当应用自行管理实例时,调用
registerXxxTypes(fory) 并传入应用的 Fory 实例。生成的 gRPC 配套代码会自动导入生成的辅助方法。
gRPC 服务配套代码
--grpc 生成 <module>_grpc.ts,其中包含服务和路径常量、handler 接口、服务定义和注册辅助方法,以及 <Service>Client 类和 create<Service>Client 工厂。--grpc-web 生成 <module>_grpc_web.ts,其中包含回调客户端以及一元 RPC 的 promise 客户端;两种客户端类及其工厂函数都会导出。Node.js 和浏览器用法请参阅 JavaScript gRPC。