Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

NG8109 means an Angular template interpolation references a signal without calling it. If the template should display the signal’s value, change {{ mySignal }} to {{ mySignal() }}. The check is one of Angular’s extended diagnostics and requires strictTemplates.

What NG8109 means

Angular names this diagnostic interpolatedSignalNotInvoked. It flags a signal that appears uninvoked in a text interpolation. A signal is a zero-argument function: calling it returns its current value. An interpolation therefore needs the call when it is meant to render that value.

For example, this component declares a signal holding a number:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
@Component({
  template: `<div>{{ mySignal() }}</div>`,
})
class MyComponent {
  mySignal: Signal<number> = signal(0);
}

How to fix NG8109

  1. Go to the template location identified by the diagnostic.
  2. Check whether the expression is a signal and the interpolation is meant to display its value.
  3. If so, invoke it by adding parentheses: change {{ mySignal }} to {{ mySignal() }}.

Do not add parentheses indiscriminately in contexts where the signal object itself is intentionally being passed or used. NG8109 specifically concerns template interpolations.

When Angular reports this diagnostic

Angular extended diagnostics require strictTemplates to be enabled; NG8109 has no additional requirement. Extended diagnostics are warnings by default. Angular lets a project configure an individual check or the default diagnostic category as a warning, an error, or suppressed.

Suppressing NG8109

If a project has a deliberate reason to silence this check, set its documented key in tsconfig.json:

{
  "angularCompilerOptions": {
    "extendedDiagnostics": {
      "checks": {
        "interpolatedSignalNotInvoked": "suppress"
      }
    }
  }
}

For the usual case, correcting the interpolation to call the signal addresses the cause rather than hiding the diagnostic.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How NG8109 differs from nearby diagnostics

Diagnostic What it concerns
NG8109 An uninvoked signal in a text interpolation.
NG8117 An uninvoked ordinary function in a text interpolation.
NG8111 An uninvoked function in an event binding.

Use the diagnostic code and the expression’s type to identify which case you are dealing with; NG8109 is specifically about signals.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Migration and Angular version notes

Angular’s v19 signal-input migration guidance describes an automated migration from @Input() fields to signal input() members that also updates references to call the migrated signal, including in templates. That guidance is specific to the v19 migration; do not assume its instructions apply unchanged to every Angular release.

Angular notes that new extended diagnostics may be added or enabled in minor versions. If a project treats the default warnings as errors, review Angular’s semver caveat when changing versions.

Official Angular references

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.