オントロジーファンクション基礎的なTypeScriptデコレータ

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

デコレータ

TypeScript の関数は、TypeScript クラス のメソッドとして宣言されます。関数が発見および公開されるためには、いくつかの要件があります:

  • メソッドは public でなければなりません
  • メソッドが属しているクラスは functions-typescript/src/index.ts ファイルからエクスポートされていなければなりません
  • メソッドは、@foundry/functions-api パッケージからインポートされた以下のデコレータのいずれかで装飾されていなければなりません:
    • ジェネリックな関数の場合は @Function()
    • アクションをバックアップする関数の場合は @OntologyEditFunction()
      • オブジェクトの出所情報は、@OntologyEditFunction() メソッドを使用する際に、@Edits([object type]) デコレータでオプションで指定できます。
      • @Edits([object type]) デコレータが欠けている場合、コードの静的分析を使用して最善を尽くしてオブジェクトの出所情報が推測されます。
    • Foundry API を通じて実行したい読み取り専用のクエリの場合は、@Query({ apiName: "userDefinedAPIName"})

以下は、このように正しくエクスポートされた関数の例です:

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 { 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 リポジトリの各ファンクションは、クラス名とメソッド名で一意に定義されていることに注意してください。クラス名やメソッド名を変更すると、ファンクションは新しい識別子の下で公開されます。