SyntaxError: Getaggte Vorlage kann nicht mit optionaler Verkettung verwendet werden

Der JavaScript-Ausnahmefehler "getaggte Vorlage kann nicht mit optionaler Verkettung verwendet werden" tritt auf, wenn der Ausdruck des Tags eines getaggten Vorlagenliteral eine optionale Verkettung ist oder wenn es eine optionale Verkettung zwischen dem Tag und der Vorlage gibt.

Meldung

SyntaxError: Invalid tagged template on optional chain (V8-based)
SyntaxError: tagged template cannot be used with optional chain (Firefox)
SyntaxError: Cannot use tagged templates in an optional chain. (Safari)

Fehlertyp

Was ist schiefgelaufen?

Es gibt zwei Möglichkeiten, diesen Fehler zu erhalten. Die erste Möglichkeit ist, wenn der Ausdruck des Tags eine Ausdruck der optionalen Verkettung ist, wie hier:

js
String?.raw`Hello, world!`;
console.log?.()`Hello, world!`;
Number?.[parseMethod]`Hello, world!`;

Die zweite Möglichkeit ist, wenn ?. zwischen dem Tag und der Vorlage auftritt, wie hier:

js
String.raw?.`Hello, world!`;

Optionale Verkettung im Tag ist speziell verboten, da es keinen klaren Anwendungsfall dafür gibt und unklar ist, was das erwartete Ergebnis sein soll (soll es undefined sein oder der Wert der Vorlage so, als wäre sie nicht getaggt?). Sie müssen die optionale Verkettung in ihre zugrunde liegende Bedingung übersetzen (siehe optionale Verkettung für weitere Informationen).

js
const result =
  String.raw === null || String.raw === undefined
    ? undefined
    : String.raw`Hello, world!`;

Denken Sie daran, dass die optionale Verkettung nur innerhalb einer geklammerten Einheit abgebrochen wird. Wenn Sie Ihren Ausdruck des Tags klammern, führt die optionale Verkettung nicht zu einem Fehler, da der Tag nun nicht abgebrochen wird und das Ergebnis klar ist (der Tag produziert undefined und führt dann zu einem Fehler in der getaggten Vorlage).

js
(console?.log)`Hello, world!`; // Throws if console?.log is undefined

Dies ist jedoch etwas unsinnig, da die optionale Verkettung Fehler innerhalb der Eigenschaftszugriffskette verhindert, aber dann garantiert einen Fehler beim Aufrufen des Vorlagen-Tags erzeugt. Wahrscheinlich möchten Sie trotzdem einen bedingten Check verwenden.

Beachten Sie, dass die optionale Verkettung nur als Ausdruck des Tags verboten ist. Sie können die optionale Verkettung innerhalb der eingebetteten Ausdrücke verwenden oder die optionale Verkettung auf den gesamten Ausdruck der getaggten Vorlage anwenden.

js
console.log`Hello, ${true.constructor?.name}!`; // ['Hello, ', '!', raw: Array(2)] 'Boolean'
console.log`Hello`?.toString(); // undefined

Siehe auch