2016-06-16 11 views
2

Ich versuche eine Funktion in ES6 zu exportieren, damit ich sie importieren und in anderen Dateien verwenden kann, um einen DRY-Code zu erhalten.JavaScript ES6 - FEHLER: Sie können nur Dekoratoren für einen Export beim Exportieren einer Klasse verwenden

Allerdings erhalte ich folgende Fehlermeldung:

You can only use decorators on an export when exporting a class (16:0) while parsing file:

@idempotent 
export function totalItems() { 
    this.cart.items.forEach((dish) => total += item.qty); 
    return total; 
} 

Irgendwelche Ideen?

+0

Sind Sie mit Babel? Wenn ja, bitte spezifizieren Sie und fügen Sie das passende Tag hinzu. –

+0

Mit Ionic2, spielt keine Rolle, da Babel nur den Code nur erfüllt. –

+0

Ist dieser Fehler * nicht vom Compiler *? Es sieht so aus, als wäre es in Babels Quellcode definiert. Definieren die darüber liegenden Zeilen einen Dekorator, den Sie einbeziehen müssen? Es ist einfacher zu helfen, wenn Sie [ein minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) bereitstellen. Bitte mach das in Zukunft. –

Antwort

1

Wenn Sie Funktion exportieren möchten, dann müssen Sie in bestimmte Klasse wie folgt hinzu:

export class GeneralFunctions 
{ 
    totalItems() { 
     this.cart.items.forEach((dish) => total += item.qty); 
     return total; 
    } 
} 

Und an der Stelle, möchten Sie diese Funktion verwenden, einfach die Klasse importieren und Objekt davon erstellen und diese Funktion aufrufen mit dem Ziel wie folgt aus:

import {GeneralFunctions} from "./<your-file>"; 

var obj : GeneralFunctions 
obj.totalItems(); 

this helps :)

5

Was Sie versuchen, unterstützt zu tun ist, nicht. Die decorator proposal (die noch nicht standardisiert ist) enthält nur @decorators für Klassendefinitionen und ihre Methoden, nicht für Funktionsdefinitionen.

Sie können einen Funktions Dekorateur/Wrapper-Funktion erstellen, um ähnliche stattdessen verwendet werden:

export const totalItems = idempotent(function() { 
    let total; 
    this.cart.items.forEach((dish) => total += item.qty); 
    return total; 
}); 
Verwandte Themen