TypeScript SDK

TypeScript SDK 包含 CUBA 数据模型( 实体和枚举 )、REST 服务查询 的类,使用 Typescript。

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 JSloadEnums 方法查询枚举的全部信息:

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"
      }
    ]
  }]