TypeScript SDK
SDK 与框架无关,也就是说,除了可以在我们的 React 客户端使用之外,也能在其他兼容 TypeScript 的框架使用,比如 Angular 或 Vue。
可以根据您不同的需求,按下列配置生成相应的代码(参阅 使用说明):
-
gen-cuba-front sdk:model
- 生成实体和枚举 -
gen-cuba-front sdk:all
- 生成所有的工具类 - 实体、枚举、查询和服务
SDK 可以用来做前端客户端开发和 Node.js BFF(服务前端的后端) 开发。
实体
持久化实体
以下是 CUBA 框架中 Role
实体生成的 Typescript 代码:
src/cuba/entities/base/sec$Role.ts
export class Role extends StandardEntity {
static NAME = "sec$Role";
name?: string | null;
locName?: string | null;
description?: string | null;
type?: any | null;
defaultRole?: boolean | null;
permissions?: Permission[] | null;
}
-
通过静态的
NAME
属性可以很方便的访问实体名称:Role.NAME
-
Role
类包含模型实体的全部属性,也包含那些从类结构中继承的属性。引用字段也有对应的类型,因此能以类型安全的方式使用这些类:function changeRole(role: Role) { role.defaultRole = true; // ok role.defaultRole = 'foo'; // 编译错误 }
非持久化实体
CUBA 平台支持非持久化实体。实体类需要标有 com.haulmont.chile.core.annotations.MetaClass
注解,并且从 com.haulmont.cuba.core.entity.BaseUuidEntity
继承。其中,带有 com.haulmont.chile.core.annotations.MetaProperty
注解的类属性会包含在生成的模型中。
源码:
package com.company;
import com.haulmont.chile.core.annotations.MetaClass;
import com.haulmont.chile.core.annotations.MetaProperty;
import com.haulmont.cuba.core.entity.BaseUuidEntity;
@MetaClass(name = "SampleUserInfo")
public class SampleUserInfo extends BaseUuidEntity {
@MetaProperty
public String firstName;
@MetaProperty
public String lastName;
}
生成代码:
export class SampleUserInfo {
static NAME = "SampleUserInfo";
firstName?: string | null;
lastName?: string | null;
}
枚举
CUBA REST API 模块在前后端通信时,能使用枚举常量名称。因此,SDK 也包含生成的字符串枚举:
export enum CarType {
SEDAN = "SEDAN",
HATCHBACK = "HATCHBACK"
}
如果需要获取枚举 id 和本地化信息,可以在运行时通过 CUBA REST JS 的 loadEnums
方法查询枚举的全部信息:
import {EnumInfo, initializeApp} from "@cuba-platform/rest";
const cubaREST = initializeApp();
cubaREST.loadEnums()
.then(((enums: EnumInfo[]) => {
console.log('enums', enums)
}));
返回值示例:
[{
"name": "com.company.mpg.entity.CarType",
"values": [
{
"name": "SEDAN",
"id": "SEDAN",
"caption": "Sedan"
},
{
"name": "HATCHBACK",
"id": "HATCHBACK",
"caption": "Hatchback"
}
]
}]