Genişletilmiş Tanılamalar

Parantez Kullanılmamış Nullish Birleştirme

Bu tanılama, nullish birleştirme operatörünün (??) önceliği belirlemek için parantez kullanılmadan mantıksal veya (||) veya mantıksal ve (&&) operatörleriyle karıştırıldığı durumları tespit eder.

import {Component, signal, Signal} from '@angular/core';

@Component({
  template: `<button [disabled]="hasPermission() && (task()?.disabled ?? true)">Run</button>`,
})
class MyComponent {
  hasPermission = input(false);
  task = input<Task | undefined>(undefined);
}

Bunda ne yanlış?

Belirsizliği giderici parantezler olmadan, ?? veya ||/&& operatörünün hangisinin önce değerlendirildiğini anlamak zordur. Bu, TypeScript ve JavaScript'te bir hata olarak kabul edilir, ancak Angular şablonlarında geçmişte izin verilmiştir.

Bunun yerine ne yapmalıyım?

Bu durumlarda belirsizliği gidermek için her zaman parantez kullanın. Kodun asıl amacından emin değilseniz ancak davranışı aynı tutmak istiyorsanız, parantezleri ?? operatörünün etrafına yerleştirin.

import {Component, signal, Signal} from '@angular/core';

@Component({
  template: `<button [disabled]="hasPermission() && (task()?.disabled ?? true)">Run</button>`,
})
class MyComponent {
  hasPermission = input(false);
  task = input<Task | undefined>(undefined);
}