typescript 算术运算的左侧必须是'any'、'number'、'bigint'类型或Angular中的枚举类型

yr9zkbsy  于 2023-06-24  发布在  TypeScript
关注(0)|答案(2)|浏览(338)

我编写了TypeScript代码来计算公司和见解的百分比,并在进度条中显示它们。代码如下所示:

export class InsightsComponent implements OnInit {
  insights: any;
  firm: Firm;

  constructor(
    private firmService: FirmService,
    private provider: FirmProvider,
    private http: HttpClient,
  ) {}

  ngOnInit(): void {
    this.provider.getInsights(this.firmService.getDomain())
      .then(data => {
        console.log(data);
        this.insights = data;
      });
    this.provider.getCurrent(this.firmService.getDomain())
      .then(data => {
        this.firm = data;
      });
  }

  calcInvoiced = (firm: Firm, insights: number) => {
    ((this.firm / this.insights) * 100).toFixed(2);
  }
}

你能给我一些关于如何优化和改进这段代码的反馈吗?

rjee0c15

rjee0c151#

您需要将算术运算赋给一个变量,或者至少返回结果。

calcInvoiced = (firm: Firm, insights: number) => {
         return ((this.firm / this.insights) * 100).toFixed(2);
  }

this.firm / this.insights也会是一个问题,因为这个.firm不是一个数字。

x0fgdtte

x0fgdtte2#

你基本上有不同的选择来简化你的代码:
1.如果不需要变量“insights”和“firm”,而只需要派生值,那么可以定义一个新的promise,并在模板中使用async操作符。这将导致在init上进行一次计算。

invoiced = Promise.all([
  this.provider.getInsights(this.firmService.getDomain()),
  this.provider.getCurrent(this.firmService.getDomain()),
]).then(([insights, firm]) => ((firm / insights) * 100).toFixed(2));

1.如果还需要其他变量,我建议您直接从服务返回可观察变量,将其存储在属性中,并使用rxjs(https://www.learnrxjs.io/learn-rxjs/operators/combination/combinelatest)中的combineLatest操作符来服务invoiced变量。您还可以使用async管道来使用这些值。

相关问题