4

以下のように定義された proto3 メッセージがある場合

message Log {
  string object = 1;
  string key_result = 2;
  string review = 3;
  repeated string tag = 4;

  string begin_at = 5;
  string end_at = 6;
  string created_at = 7;
  string id = 8;
}

protoc withは次のような dt を生成--js_outします--ts_out

export class Log extends jspb.Message {
  getObject(): string;
  setObject(value: string): void;

  getKeyResult(): string;
  setKeyResult(value: string): void;

  getReview(): string;
  setReview(value: string): void;

  clearTagList(): void;
  getTagList(): Array<string>;
  setTagList(value: Array<string>): void;
  addTag(value: string, index?: number): string;

  getBeginAt(): string;
  setBeginAt(value: string): void;

  getEndAt(): string;
  setEndAt(value: string): void;

  getCreatedAt(): string;
  setCreatedAt(value: string): void;

  getId(): string;
  setId(value: string): void;

  serializeBinary(): Uint8Array;
  toObject(includeInstance?: boolean): Log.AsObject;
  static toObject(includeInstance: boolean, msg: Log): Log.AsObject;
  static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
  static serializeBinaryToWriter(message: Log, writer: jspb.BinaryWriter): void;
  static deserializeBinary(bytes: Uint8Array): Log;
  static deserializeBinaryFromReader(message: Log, reader: jspb.BinaryReader): Log;
}

メソッドLogを介してクラスをオブジェクト に変換するのは簡単です。toObjectしかし、オブジェクトをクラスに変換するには、各フィールドを手動で設定する必要があります。

export function toLog(log: Log.AsObject): Log {
    const t = new Log
    t.setObject(log.object)
    t.setKeyResult(log.keyResult)
    t.setReview(log.review)
    t.setTagList(log.tagList)
    t.setBeginAt(log.beginAt)
    t.setEndAt(log.endAt)
    t.setCreatedAt(log.createdAt)
    t.setId(log.id)
    return t
}

そのようなタスクを実行する簡単な方法はありますか?

4

0 に答える 0