TypeScript版本:3.9.2
搜索词:The return type of an async function must either be a valid promise or must not contain a callable 'then' member.(1058)
代码:
async function
export declare class ElementFinder {
then?: (fn: (value: any) => any, errorFn?: (error: any) => any) => Promise;
}
export declare class ElementArray{
first(): ElementFinder;
}
export async function assertSingleElement( // error: The return type of an async function must either be a valid promise or must not contain a callable 'then' member.(1058)
array: ElementArray,
): Promise {
//await something up here so require async function
return array.first() as any;
}
(): Promise<{ `then`() }> {
return {
`then`: async () => {
// ...
},
};
}
这段代码在TypeScript 3.8中可以正常工作,但在TypeScript 3.9.2中会报错。要解决这个问题,可以将返回的对象类型更改为Promise<any>
,这样就可以避免类型检查错误。修改后的代码如下:
async function
export declare class ElementFinder {
then?: (fn: (value: any) => any, errorFn?: (error: any) => any) => Promise;
}
export declare class ElementArray{
first(): ElementFinder;
}
export async function assertSingleElement( // error: The return type of an async function must either be a valid promise or must not contain a callable 'then' member.(1058)
array: ElementArray,
): Promise {
//await something up here so require async function
return array.first() as any;
}
(): Promise<any> {
return {
`then`: async () => {
// ...
},
};
}
5条答案
按热度按时间5lhxktic1#
有趣的是,将
then
方法设为非可选会消 debugging 误:yyyllmsg2#
是的,那么这个修复能否发布?
qkf9rpyu3#
目前的一种解决方法是在返回行之前添加
//@ts-expect-error
,这将在错误消失时给你一个编译器错误,所以你需要记住更新它。lfapxunr4#
我的解决方法是声明以下替换的ElementFinder类,该类继承自protractor.ElementFinder。然后将所有对protractor.ElementFinder的引用替换为它,使用
as unknown as ElementFinder
对检索到的元素进行类型转换。这并不是很好,但似乎可以正常工作。
zdwk9cvp5#
关于这个的更新情况如何?对于我们仍在使用Protractor的人来说,这是一个糟糕的消息。