在我的项目中,我使用的是
[email protected]
并且工作正常,但现在我将其版本更新到最新的 [email protected]
并且它给了我很多错误。我在文档中找不到任何内容,也不知道如何解决此问题。
这是我的代码:
abstract class SystemValidator {
constructor() {}
abstract async validate(addr:Addr):Promise<[boolean, Addr[], SystemValidationErrors]>
}
这给了我错误:
错误 TS1243:“异步”修饰符不能与“抽象”修饰符一起使用。
有什么办法可以解决这个问题吗?我应该从这里删除
aync
吗??
是的,您应该删除
async
。
您不应该强制在实现它的类中使用
async
。还有其他方法可以返回 Promise
,而不仅仅是 async
。
因为有些人不清楚为什么
async
不重要。这里有几种返回承诺的方法:
async function iAmAsync(): Promise<boolean>{
return false;
}
function iAmNotAsync(): Promise<boolean>{
return new Promise(resolve => resolve(false));
}
function iAmAlsoNotAsync(): Promise<boolean>{
return new Observable().pipe(first()).toPromise();
}
iAmAsync().then();
iAmNotAsync().then();
您可以简单地从声明中删除
async
关键字,并在实现中仍然使用 async
。
abstract class Shape {
abstract area(): Promise<number>;
}
class Circle extends Shape {
constructor(private radius: number) {
super();
}
async area() {
return Math.PI * Math.pow(this.radius, 2);
}
}
(async () => {
const circle = new Circle(5);
console.log(await circle.area());
})();
如果你想知道为什么不需要它以及为什么它完全多余,我会参考我在 TypeScript Github 上找到的解释
修饰符唯一做的两件事是:1.使函数返回一个promise,2.允许在实现中使用async
。由于抽象方法没有实现,并且您已经必须将其返回类型声明为await
,因此Promise<Whatever>
在这种情况下是多余的。async