javascript - 为什么我不能“导出默认值”一个与其定义一致的常量?
问题描述
我可以定义一个函数,然后导出为默认值,将其定义为内联导出,或者定义它并将其导出为默认内联:
function myFunc() {
...
}
export default myFunc;
export function myFunc2() {
...
}
export default function myFunc3(param) {
...
}
我可以定义一个类然后导出为默认值,定义它并将其导出为内联,或者定义它并将其导出为默认内联:
class MyClass {
...
}
export default MyClass;
export class MyClass2 {
...
}
export default class MyClass3 {
...
}
很酷,所以类和函数是一致的。现在,常量:
定义然后导出为默认值:
const myConst = 42;
export default myConst;
定义和导出内联:
export const myConst = 42;
那些很好。但我无法定义它并将其导出为默认内联:
export default const myConst = 42; // nope -- syntax error!
我的问题:为什么在这方面常量与类和函数不同?它们都是可导出的,都可以作为默认值导出。为什么我不能用常量内联?
我发现为什么 `Export Default Const` 无效?谷歌搜索时。我相信提问者试图问我同样的问题,但有一个高度赞成、接受的答案并没有回答我的问题。我不是问编译器拒绝语法的技术原因。我希望了解为什么这种语言是这样设计的。
如果有帮助,答案可能是“如果支持这种语法,[事情] 会发生”或“它曾经以这种方式工作,但我们删除了它,因为 [事情] 发生了”或“有一个开放的关于将其添加到规范中的讨论,请参见 [此处]。”
如果 TypeScript 和 JavaScript 之间的区别与答案有任何关联,请澄清。
解决方案
看看为什么 JavaScript 有默认导出。它们是作为语法糖引入的:
export default function example() {}
// is the same as
function example() {}
export { example as default }
export default class Example {}
// is the same as
class Example {}
export { Example as default }
export default (expression);
// is the same as
let *default* = (expression);
export { *default* as default }
export
不是你可以贴在任何声明上的修饰符,它是一种单独的声明语句。
默认导出/导入旨在简化模块以微不足道的名称导出单个函数或类的常见用例(这就是它们甚至允许匿名声明的原因)-创建整个模块(或只是遵循Java“每个类一个文件”模式)。常量值不是您通常会为其创建自己的模块的东西,因此它没有特殊的语法糖。一起去
const myConst = 42;
export { myConst as default};
或(如果您实际上不需要本地名称)
export default 42;
推荐阅读
- c# - 对异步 Main() 中的等待行为的困惑
- sql - 从不一起订购产品 p1 和 p2 的 SQL 客户
- php - 我怎样才能在哪里做多个?哪里不工作
- oracle - Jmeter,使用 Jmeter 读取 BLOB(其中包含一个 XML)
- azure - 将多个 Azure Functions 部署到同一个应用服务计划的定价(弹性高级计划 - EP1)
- android-studio - 我正在尝试运行颤振应用程序,但是在运行 gradle 任务“assemblyDebug”时会发生这种情况。我怎样才能克服这个
- assembly - 英特尔机器语言如何指定寄存器?
- node.js - TypeORM 未找到连接选项。可疑问题在于 dist 文件夹和 tsconfig
- c# - 使用 NSubstitute 和 Repository 模拟 DbContext 为空或 NotImplementedException
- python - Python 子进程 - 返回非零退出状态 1