我试图定义一种异步函数,但编译失败,见下文:
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 ''
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我解决这个问题吗?
Thi*_*ala 89
找到这个搜索如何为异步箭头函数声明"typedef".
如果你只是将函数的返回类型声明为Promise,它就可以工作:
interface SearchFn {
(subString: string): Promise<boolean>;
}
Run Code Online (Sandbox Code Playgroud)
或作为一种类型的退出:
type SearchFn = (subString: string) => Promise<boolean>;
Run Code Online (Sandbox Code Playgroud)
Mot*_*tti 43
该async
关键字用于向编译器/运行时指示相关函数将在await
内部使用(因此它可以放入所需的脚手架以启用它)。
这意味着async
它只对函数的实现有意义,而不是它的interface。因此,async
拥有接口的方法没有用,您想说该函数返回某个Promise
(在您的情况下Promise<string>
),但您不想强制接口的实现者以某种方式(使用await
)实现它。
所以正如其他人在我之前所说:
interface SearchFn {
(subString: string): Promise<string>;
}
Run Code Online (Sandbox Code Playgroud)
然后,选择实现此功能的任何人都可以选择使用async
,简单的旧Promise.then
方法,甚至可能是将来会出现的一些新方法。
Ben*_*arp 11
将返回对象的类型传递给 Promise 泛型。
type SearchFn = (subString: string): Promise<string>;
Run Code Online (Sandbox Code Playgroud)
或者,您可以声明一个AsyncFunction
泛型类型。
type AsyncFunction <A,O> = (...args:A) => Promise<O>
type SearchFn = AsyncFunction<[string], string>
Run Code Online (Sandbox Code Playgroud)
AsyncFunction 是一个类型泛型,它接收两个类型变量——输入(A)的类型和输出的类型。
归档时间: |
|
查看次数: |
26362 次 |
最近记录: |