typescript 错误TS1243:'abstract'修饰符不能与'abstract'修饰符一起使用

4ktjp1zp  于 12个月前  发布在  TypeScript
关注(0)|答案(2)|浏览(236)

在我的项目中,我使用[[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection),它工作正常,但现在我更新其版本到最新的[[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection),它给了我很多错误.我无法找到任何文档,也没有得到任何想法如何解决这个问题.
下面是我的代码:

abstract class SystemValidator {

    constructor() {}

    abstract async validate(addr:Addr):Promise<[boolean, Addr[], SystemValidationErrors]>

字符串
}
这给了我一个错误:
错误TS1243:'abstract'修饰符不能与'abstract'修饰符一起使用。
有什么办法解决这个问题吗?我应该从这里删除aync吗?

vngu2lb8

vngu2lb81#

是的,你应该删除async
你不应该强迫实现它的类使用async。有其他方法可以返回Promise,而不仅仅是async

编辑:

由于有些人不清楚为什么async不重要。这里有几种返回promise的方法:

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();

字符串
Playground链接

b1zrtrql

b1zrtrql2#

您可以简单地从声明中删除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上找到的这个解释。
async修饰符只做了两件事:1.让函数返回promise,2.允许在实现中使用await。由于抽象方法没有实现,并且您必须将其返回类型声明为Promise<Whatever>,因此async在该上下文中是多余的。

相关问题