1. ホーム
  2. typescript

[解決済み] typescriptで、非同期関数の型を定義する方法

2022-05-11 09:11:26

質問

非同期関数の型を定義しようとしましたが、以下のようにコンパイルに失敗しました。

interface SearchFn {
    async (subString: string): string;
}

class A {
    private Fn: SearchFn
    public async do():Promise<string> {
        await this.Fn("fds") // complain here: cannot invoke an expression whose type lacks a call signature
        return ''
    }
}

誰かこれを解決するのを手伝ってくれませんか?

どのように解決するのですか?

非同期矢印関数に "typedef"を宣言する方法を探していてこれを見つけました。

関数の戻り値の型をPromiseと宣言するだけで、うまくいきます。

interface SearchFn {
    (subString: string): Promise<boolean>;
}

または型宣言として使用します。

type SearchFn = (subString: string) => Promise<boolean>;

MicrosoftのTS Linterは、この2番目の構文を推奨します。