パスワードを忘れた? アカウント作成
15757064 journal
日記

yuuka_maniaの日記: TypeScript async/await とメソッドチェーン 3

日記 by yuuka_mania

await を含む処理は、 async 関数としなければならい。で、 async 関数の戻り値は、ジェネリクスで Promise にしなければならない。

例えば、

export class HttpGet {
  uri: string;
  response: Response | undefined = undefined;
 
  constructor(uri: string) {
    this.uri = uri;
  }
 
  async do(): Promise<HttpGet> {
    let ret = await fetch(this.uri, {
      method: "GET",
    });
    this.response = ret;
    return this;
  }
}

な、クラスがあって、

  let res = await new HttpGet("http://localhost:8080/").do().response;

なメソッドチェーンの書き方をすると、コンパイルできない。do() が返すのは、 Promise で、 HttpGet 型ではないから、 .response プロパティは存在しないと怒られる。

一方、以下は、コンパイルが通る。

  let res = await new HttpGet("http://localhost:8080/").do()
  consooe.log(res.response);

これ、どうにかして、1行のメソッドチェーンで書きたいと試行錯誤したところ、

  let res = (await new HttpGet("http://localhost:8080/").do() as HttpGet).response;

型アサーションで書くと、期待する動作を確認できた。スッキリ!

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

読み込み中...