JS/TS 的 import 和 export 用法-总结

Posted JackieDYH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS/TS 的 import 和 export 用法-总结相关的知识,希望对你有一定的参考价值。

基本用法

比如模块A 向外部提供变量a1和函数fn供其他模块调用,那么我们在模块B中调用a1和fn。


//A.js
var a1=111
function fn(){
}

export {a1,fn}   //在文件的底部统一导出,即使有时候导出的变量只有一个也这样写

那么在B.js中调用的形式就是这样:


//B.js
import {a1,fn} from './A'

console.log(a1)
fn()

调用的时候 统一使用 import {xxx,xxx2,xxx3} from 'xxx'的形式调用。
当然了如果只用到其中一个变量或函数,那么只需要import进来需要的那个就行了,比如import {a1} from './A'.

但有时候遇到这种情况,名字重复比如B.js里面已经有个变量叫a1了,那么就加个 as 起个别名。


//B.js
import {a1 as a111,fn} from './A'

console.log(a111)
fn()

还有一种常用的import是这样的:


import * as A from './A'
console.log(A.a1)

这个怎么理解记忆呢,就是A模块在代码里不是这样导出的吗——export {a1,fn} 这里看成导出了一个对象,对应我们import * as A from './A里面的 *,然后我们给它起了个别名叫A,当然叫A是为了记忆使用的方便,你可以叫其他什么abcd,那么调用的时候就是abcd.a1 abcd.fn.

以上就是一种 export 和两种import 的搭配使用方式。在我自己早期import和export也是各种组合用,自己把自己搞糊涂了,最后发现就这俩套路翻来覆去的用,就能解决问题。

各自导出的方式

当然了,除了自己写代码,还经常调用别人写的代码,比如有这个C模块:


export var c1 = 222
//
// 
//
export function fn() {

}

我一般不推荐这种写法,缺点之一是导出的变量或者函数分散在代码的各个地方,没有一个统一管理的地方,另一个缺点是不能够直观的让人理解导出的形式。

不过如果是别人写的话我们也没有办法,那我们自己可以在脑子里把他成想象成之前说的的那种导出方式:


var c1 = 222
//
// 
//
function fn() {

}


export{c1,fn}

那么怎么import使用就和上面的基本情况一样了,就不赘述了。

default的用法

还有一种export用法


//C.js
 var c1 = 222
//
//
//
 function fn() {

 }

 var c2=222

export { c1,fn}
export default c2

注意这里的c2前面加了个default,那这个有啥用的呢,就是其他模块import的时候能简单点——少写一对大括号。


import c2 from "./C";

当然这里有个所谓的『优点』就是直接起别名import c222 from "./C"相当于import c2 as c222 from "./C"

然后如果我们的代码里还使用了C模块的其他变量或函数,那就要这样了


import c2 ,{c1,fn} from "./C";

你就会发现import的用法瞬间成笛卡尔积复杂起来:加大括号的、不加大括号的、起别名加as的、不加as的、import*的、不带星的再乘以export的分开export的、不分开export的 default和不default的…………

以上是关于JS/TS 的 import 和 export 用法-总结的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript import/export

export和export default的区别

ES6中export和import详解(export定义了模块的对外接口后,其他JS文件就可以通过import来加载这个模块)

JS/TS项目里的Module都是什么?

export 与 export default, 以及import引用

js的import 与export详解