是否可以在ES6 / 7中导出Arrow函数?


95

下面的export语句给出语法错误

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

为什么呢?

我只能导出命名函数

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

是什么原因?


4
该错误实际上说明了什么?
安迪

2
在这里工作正常:astexplorer.net/#/0fv5UXttsP
费利克斯·克林


1
语法错误是什么?
omarjmh '16

1
您无法命名默认导出。
Felix Kling

Answers:


154

是否可以在ES6 / 7中导出Arrow函数?

是。export不在乎您要导出的值。

下面的export语句给出了语法错误...为什么?

您不能具有默认导出为其命名(“默认”已经是导出的名称)。

要么做

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

要么

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

4
下面的工作方式是如何导出默认的hello =()=> {console.log(“ why the downvote”)}
jozzy

3
x = y是一个解析为的值的赋值表达式y。这不是变量声明。您可以将x = y表达式放在任何地方。注意:如果x未事先定义,它将以严格模式抛出。
Felix Kling

2
定期出口怎么样?有可能做类似的事情export () => {/*body*/} as getUsers;吗?还是我必须先定义它然后导出它?
Tomasz Mularczyk

44
@Tomasz:export const getUser = () => {...};
Felix Kling

3
@Burrich:函数的创建方式无关紧要,只要它可以按预期的方式使用即可。
菲利克斯·克林

12

如果您不希望默认导出,则可以使用以下语法简单地导出命名函数:

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

因此,您替换export function yourFunctionName () {export const yourFunctionName = () => 。字符长度是相同的,但是在本节中很有可能打错字= () =>。老实说,对我来说,它的可读性更差,而且工作更多:)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.