3

由于我是reading here,ES2015允许您导出varconst,let,function,classdefault为什么你必须在ES2015中指定导出的类型(let,var,const ...)?

export var myVar1 = ...; 
export let myVar2 = ...; 
export const MY_CONST = ...; 

export function myFunc() { 
    ... 
} 
export function* myGeneratorFunc() { 
    ... 
} 
export class MyClass { 
    ... 
} 

但我不明白为什么。在我的外行人看来,应该有named exportsdefault exports

您输出的内容似乎并不重要。我的意思是,当你export default,你指定的类型?不,你不这样做,它的工作原理。另外,它能输出varlet有什么不同? export const有什么不同?当你导入一个模块时,它是不可变的(AFAIK)。

那么,为什么你必须指定输出的类型?

回答

2

声明变量,函数或新的常量值与导出没有任何关系。 var,let或const的行为在模块中是不同的,所以你需要指明它是什么。如果你输出它是另一回事。

这些值从模块外部是不可变的,但不是从内部(例如从另一个导出的函数)。

export let mutable = 1; 
export const immutable = 2; 

export function change() { 
    mutable = 11; //works 
    immutable = 22; //throws, the value is const 
} 
0

如果你的出口是默认的,你没有指定要导出什么的名称或类型,所以你可以做:

export default "whateveryoulike"; 

但命名出口是不同的,你必须指定变量名,这样就可以通过这个名字导入(类型并不重要):

const x = "whateverelse"; 
const y = "onemore"; 
export {x, y as z}; 
5

您不必指定导出的类型 - 您必须指定在本地绑定的类型你的模块。

应该有命名导出和默认导出。

有:

export {localX as exportedX}; 
export {localX as default}; 

所有你给实际上是速记的例子,这两个声明一个局部变量,并以相同的名称将其导出:

var myVar1 = …; 
let myVar2 = …; 
const MY_CONST = …; 
function myFunc() { 
    … 
} 
function* myGeneratorFunc() { 
    … 
} 
class MyClass { 
    … 
} 

export { 
    myVar, 
    myVar2, 
    MY_CONST, 
    myFunc, 
    myGeneratorFunc, 
    myClass 
}; 

export const有什么不同?当你导入一个模块时,它是不可变的。

你不能重新分配它里面你的模块。导出不会导出值,它会将绑定导出到您的本地变量。导入实际上不是不可变的,它们只是不可写的。

// example.js 
export var value; // this one would not work with `const` 
export default function(x) { 
    value = x; 
} 

// main.js 
import write, {value} from 'example'; 
console.log(value); // undefined 
write(42); 
console.log(value); // 42 

1:默认出口在这方面有点特殊。 export default …声明确实允许您直接导出表达式的值(或匿名函数/函数* /类声明),但在幕后它实际上会在模块中创建名称为*default*的本地变量。

1

你用模块的出口有类似的代码

export const x = 10; 

中,你不能只用

x = 10; 

声明一个变量,你不能宣布一个同样的方式合并变量声明变量,然后将其分配给一个命名的输出与

export x = 10; 

H ERE是你可以做什么:

const x = 10; 
const y = (arg) => arg + 10; 
export { x, y }; 

这本质上只是分离变量声明的逻辑和命名模块出口

相关问题