Est-il possible d'exporter des fonctions Arrow dans ES6 / 7?

96

La déclaration d'exportation ci-dessous donne une erreur de syntaxe

export default const hello = () => console.log("say hello")

Pourquoi ?

Je ne peux exporter que des fonctions nommées

export function hello() {
  console.log("hello")
}

Quelle est la raison?

Jozzy
la source
4
Que dit réellement l'erreur?
Andy
2
Fonctionne très bien ici: astexplorer.net/#/0fv5UXttsP .
Felix Kling
1
quelle est l'erreur de syntaxe?
omarjmh
1
Vous ne pouvez pas nommer une exportation par défaut.
Felix Kling

Réponses:

156

Est-il possible d'exporter des fonctions Arrow dans ES6 / 7?

Oui. exportne se soucie pas de la valeur que vous souhaitez exporter.

La déclaration d'exportation ci-dessous donne une erreur de syntaxe ... pourquoi?

Vous ne pouvez pas avoir d' export par défaut et lui donner un nom ("default" est déjà le nom de l'export).

Soit faire

export default () => console.log("say hello");

ou

const hello = () => console.log("say hello");
export default hello;
Félix Kling
la source
4
Comment fonctionne ce qui suit, puis exportez par défaut hello = () => {console.log ("why the downvote")}
jozzy
3
x = yest une expression d'affectation qui se résout à la valeur de y. Ce n'est pas une déclaration de variable. Vous pouvez mettre x = yn'importe où vous pouvez mettre une expression. Remarque: Cela lancera en mode strict s'il xn'est pas défini au préalable.
Felix Kling
2
qu'en est-il des exportations régulières? est-il possible de faire quelque chose comme export () => {/*body*/} as getUsers;:? ou dois-je d'abord le définir puis l'exporter?
Tomasz Mularczyk
44
@Tomasz:export const getUser = () => {...};
Felix Kling
3
@Burrich: La manière dont une fonction a été créée ne devrait pas avoir d'importance tant qu'elle peut être utilisée comme elle est censée l'être.
Felix Kling
13

Si vous ne voulez pas d'export par défaut, vous pouvez simplement exporter une fonction nommée avec cette syntaxe:

export const yourFunctionName = () => console.log("say hello");
Raphaël Pinel
la source
Alors vous remplacez export function yourFunctionName () {par export const yourFunctionName = () => . La longueur des caractères est la même, mais il y a de fortes chances de faire une faute de frappe dans cette section = () =>. Honnêtement, pour moi, cela semble moins lisible et plus de travail :)