本体函数TypeScript basics装饰器

注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

装饰器

TypeScript ↗ 函数被声明为 TypeScript 类 ↗ 的方法。发现和发布函数有一些要求:

  • 方法必须是 public
  • 方法所属的类必须从 functions-typescript/src/index.ts 文件中导出
  • 方法必须用从 @foundry/functions-api 包导入的以下装饰器之一进行装饰:
    • 通用函数使用 @Function()
    • 用于支持操作的函数使用 @OntologyEditFunction()
      • 使用@OntologyEditFunction() 方法时,可以选择性地使用 @Edits([object type]) 装饰器指定 Object 来源信息。
      • 如果缺少 @Edits([object type]) 装饰器,Object 来源信息将通过代码的静态分析以尽力而为的方式推断。
    • 只读查询可以通过 Foundry API 执行的使用 @Query({ apiName: "userDefinedAPIName"})。请注意,此装饰器不应与 @Function 装饰器同时使用;应单独使用。

以下是以这种方式正确导出的函数示例:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import { Function, OntologyEditFunction, Integer, Edits } from "@foundry/functions-api"; import { Employee } from "@foundry/ontology-api"; export class MyUsefulFunctions { @Function() public incrementNumber(x: Integer): Integer { // 该函数接收一个整数并返回其加1后的值 return x + 1; } @Edits(Employee) @OntologyEditFunction() public updateName(employee: Employee, newName: string): void { // 该函数用于更新员工的名字为新的名字 employee.firstName = newName; } @Query({ apiName: "getEmployeesByName" }) public async getEmployeesByName(name: string): Promise<ObjectSet<Employee>> { // 该异步函数根据给定的名字查找员工并返回符合条件的员工集合 return Objects.search().employee().filter(employee => employee.firstName.exactMatch(name)); } }

任何私有方法或未使用相关装饰器的装饰方法都不会发布到函数注册表。这允许用户创建辅助函数和实用工具以便重用或组织。

重新发布

请注意,每个TypeScript库中的函数都是由其类名和方法名唯一定义的——如果您更改类或方法的名称,该函数将以新的标识符发布。