前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >TypeScript 中的 export 和 import

TypeScript 中的 export 和 import

作者头像
beginor
发布于 2020-08-10 06:50:29
发布于 2020-08-10 06:50:29
3.7K00
代码可运行
举报
运行总次数:0
代码可运行

TypeScript 中的 export 和 import

TypeScript 中, 经常要使用 exportimport 两个关键字, 这两个关键字和 es6 中的语法是一致的, 因为 TypeScript = es6 + type !

注意: 目前没有任何浏览器实现 exportimport ,要在浏览器中执行, 必须借助 TypeScript 或者其它的转换器!

export

export 语句用于从文件(或模块)中导出函数, 对象或者基础类型, 语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export { name1, name2,, nameN };
export { variable1 as name1, variable2 as name2,, nameN };
export let name1, name2,, nameN; // also var
export let name1 =, name2 =,, nameN; // also var, const

export default expression;
export default function () {} // also class, function*
export default function name1() {} // also class, function*
export { name1 as default,};

export * from …;
export { name1, name2,, nameN } from …;
export { import1 as name1, import2 as name2,, nameN } from …;

nameN 表示要导出的标识符, 可以在另一个文件中通过 import 语句导入。

有两种类型的导出, 分别对应上面的语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 命名的导出
 export { myFunction } // 导出已经声明的函数 export const foo = Math.sqrt(2) // 导出一个常量
 
 当需要导出多个值的时候, 命名的导出就非常有用了, 在导入时, 可以使用同样的名字来引用对应的值, 示例:
 // mylib.ts export function cube(x: number): number {     return x * x * x; } const foo: number = Math.PI * Math.sqrt(2); export { foo }
 
 在另一个文件 main.ts 中, 这样使用:
 // main.ts import { cube, foo } from './mylib'; console.log(cube(3)); // 27 console.log(foo); // 4.555806215962888
 
 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 默认的导出
 export default function () {} // 导出默认的函数, 不使用花括号
 
 一个文件(模块)默认的导出只能有一个, 可以是类,函数, 对象等, 示例:
 // mylib.ts export default function (x: number): number {     return x * x * x; }
 
 在另一个文件 main.ts 中, 这样使用:
 // main.ts import cube from './mylib'; console.log(cute(3)); // 27
 
 

import

importexport 对应, 用于导入其它文件(模块)导出的函数, 对象或者其他基础类型, 语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import defaultMember from "module-name";
import * as name from "module-name";
import { member } from "module-name";
import { member as alias } from "module-name";
import { member1 , member2 } from "module-name";
import { member1 , member2 as alias2 , [...] } from "module-name";
import defaultMember, { member [ , [...] ] } from "module-name";
import defaultMember, * as name from "module-name";
import "module-name";
  • name 用来接收导入的值的对象的名称;
  • member, memberN 要导入的外部模块的导出名称;
  • defaultMember 要导入的外部模块的默认导出的名称;
  • alias, aliasN 要导入的外部模块的导出的别名;
  • module-name 要导入的外部模块的名称, 通常是文件名;

import 常见的用法有:

  • 导入整个模块的内容, 在当前作用域插入 myModule 变量, 包含 my-module.ts 文件中全部导出的绑定:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import * as myModule from 'my-module';
  • 导入模块的某一个导出成员, 在当前作用域插入 myMember 变量:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { myMember } from 'my-module';
  • 导入模块的多个导出成员, 在当前作用域插入 foobar 变量:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {foo, bar} from 'my-module';
  • 导入模块的成员, 并使用一个更好用的名字:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {reallyReallyLongModuleMemberName as shortName} from 'my-module'; import {reallyReallyLongModuleMemberName as shortName, anotherLongModuleName as short} from 'my-module';
  • 将整个模块座位附加功能导入, 但是不导入模块的额导出成员
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

 import 'my-module';
  • 导入模块的默认导出:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import myDefault from 'my-module';
  • 导入模块的默认导出和命名导出:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import myDefault, * as myModule from 'my-module'; // myModule used as a namespace
或者
import myDefault, {foo, bar} from 'my-module'; // specific, named imports
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JavaScript 学习-47.export 和 import 的使用
前言 JavaScript 的每个.js文件都是独立的,在开发一个项目会有很多的.js文件,有些是公共的方法,可以单独放到一个.js文件中,其它的文件去调用公共方法。 但是,Javascript不是一种模块化编程语言,在es6以前,它是不支持类(class),所以也就没有”模块”(module)了。 export导出模块 在es6以前,还没有提出一套官方的规范,从社区和框架推广程度而言,目前通行的javascript模块规范有两种:CommonJS 和 AMD ES6标准发布后,module成为标准,标准使
上海-悠悠
2022/09/28
7100
JavaScript 学习-47.export 和 import 的使用
ES Module
惟一作用是让浏览代码变得容易一些,迅速找到指定模块,根本原因是单文件内容太长,已经遇到了维护的麻烦,所以手动插入一些锚点供快速跳转
ayqy贾杰
2019/06/12
9450
ES Module
JS中import怎么用?
静态导入在页面加载时就会被导入,有时模块太大且不会在页面加载时使用,可以使用动态导入,在需要用的时候在导入模块。
Learn-anything.cn
2021/11/27
9.8K0
理解 import 基本用法
语法 不同的 import 的引入方法 import defaultExport from "module-name"; import * as name from "module-name"; import { export } from "module-name"; import { export as alias } from "module-name"; import { export1 , export2 } from "module-name"; import { export1 , expor
西南_张家辉
2021/02/02
4880
JS中export怎么用?
有两种不同的导出方式:命名导出和默认导出。命名导出可以导出多个接口,而默认导出,只能导出一个。
Learn-anything.cn
2021/11/27
12.5K0
医美小程序实战教程(二)
我们上一篇介绍了导航组件的使用方法及变量创建的方法,本篇我们就开始阅读官方模板的代码,通过拆解技术点的形式来夯实前端基础知识。
低代码布道师
2021/11/07
3350
JS module的导出和导入
最近看了些Vue框架写的程序,发现自己的前端知识还停留在几年以前,发现现在Javascript程序里有各种各样的对module的导入和到处,导入乍一看跟python的语法挺像的无非就是把 from和 import这两个关键词的使用颠倒了一下顺序。仔细看下来还是和python挺不一样的 import模块的前提是模块有导出,并且还分默认导出和命名导出,有些麻烦。所以今天这篇文章就把所有的 export形式和相应的 import使用汇总一下。
KevinYan
2019/10/13
2.7K0
模块_TypeScript笔记13
简单来讲,如果一个文件中含有合法的import或export语句,就会被当做模块(拥有模块作用域),否则就将在运行在全局作用域下。例如:
ayqy贾杰
2019/06/12
7070
Js模块化开发的理解
模块化是一个语言发展的必经之路,其能够帮助开发者拆分和组织代码,随着前端技术的发展,前端编写的代码量也越来越大,就需要对代码有很好的管理,而模块化能够帮助开发者解决命名冲突、管理依赖、提高代码的可读性、代码解耦以及提高代码的复用性。
WindRunnerMax
2020/11/12
2.1K0
在 TypeScript 中,如何导入一个默认导出的变量、函数或类?
在 TypeScript 中,如果要导入一个默认导出的变量、函数或类,可以使用 import 关键字结合 default 关键字来引用默认导出的成员。
王小婷
2023/10/16
1.1K0
命名空间_TypeScript笔记15
注意到这里通过三斜线指令引入被拆分出去的“namespace 模块”(而不是像 module 一样 import),仍用import的话,会得到报错:
ayqy贾杰
2019/06/12
7330
import export 理解
1.  ES6之前JavaScript没有模块体系,相关社区提供了一些加载方案,最主要是两种CommonJs和AMD两种。ES6在语言标准层面实现了,实现了模块功能而且实现的相当简单,成为服务器和浏览器相通用的解决方案
用户2436820
2018/09/05
8260
import export 理解
TypeScript 导出 CommonJS 和 ES 模块
要导出到 TypeScript 中的 CommonJS 和 ES 模块,请在导出中设置默认属性:
小弟调调
2023/08/28
6640
TypeScript 导出 CommonJS 和 ES 模块
《现代Typescript高级教程》扩展类型定义
在 TypeScript 中,我们可以通过声明文件(.d.ts 文件)来为现有的 JavaScript 库提供类型定义,或者为现有的类型添加额外的属性和方法。这个过程通常被称为“类型声明扩展”。在这篇文章中,我们将详细探讨如何通过声明文件扩展类型定义。
linwu
2023/07/27
6110
快速学习TypeScript——模块
从ECMAScript 2015开始,JavaScript引入了模块的概念。TypeScript也沿用这个概念
玖柒的小窝
2021/11/16
1.2K0
巧妙利用TypeScript模块声明帮助你解决声明拓展
—\ntheme: awesome-green\n—\n# 写在开头\n\n网络上大部分 Typescript 教程都在告诉大家如何使用类型体操更好的组织你的代码。\n\n但是针对于声明文件(Declaration Files)的相关内容却是少之又少。\n\n这篇文章中,我会带你着重讲述 TypeScript Declaration Files 的用法让你的 TS 功底更上一层。\n\n# TypeScript 模块解析规则\n\n在开始之前,我们先来聊聊 TS 文件的加载策略。\n\n> 掌握加载策略才会让我们实实在在的避免一些看起来毫无头绪的问题。\n\nTS 中的加载策略分为两种方式,分别为相对路径和绝对路径两种方式。\n\n## 首先我们来看看相对模块的加载方式:\n\nTypeScript 将 TypeScript 源文件扩展名(.ts、.tsx和.d.ts)覆盖在 Node 的解析逻辑上。同时TypeScript 还将使用package.jsonnamed中的一个字段types来镜像目的"main"- 编译器将使用它来查找“主”定义文件以进行查阅。\n\n比如这样一段代码:\n\nts\n// 假设当前执行路径为 /root/src/modulea\n\nimport { b } from './moduleb'\n\n\n此时,TS 对于 ./moduleb 的加载方式其实是和 node 的模块加载机制比较类似:\n\n+ 首先寻找 /root/src/moduleb.ts 是否存在,如果存在使用该文件。\n\n+ 其次寻找 /root/src/moduleb.tsx 是否存在,如果存在使用该文件。\n\n+ 其次寻找 /root/src/moduleb.d.ts 是否存在,如果存在使用该文件。\n\n+ 其次寻找 /root/src/moduleB/package.json,如果 package.json 中指定了一个types属性的话那么会返回该文件。\n\n+ 如果上述仍然没有找到,之后会查找 /root/src/moduleB/index.ts。\n\n+ 如果上述仍然没有找到,之后会查找 /root/src/moduleB/index.tsx。\n\n+ 如果上述仍然没有找到,之后会查找 /root/src/moduleB/index.d.ts。\n\n可以看到 TS 中针对于相对路径查找的规范是和 nodejs 比较相似的,需要注意我在上边已经额外加粗了。\n\nTs 在寻找文件路径时,在某些条件下是会按照目录去查找 .d.ts 的。\n\n## 非相对导入\n\n在了解了相对路径的加载方式之后,我们来看看关于所谓的非相对导入是 TS 是如何解析的。\n\n我们可以稍微回想一下平常在 nodejs 中对于非相对导入的模块是如何被 nodejs 解析的。没错,它们的规则大同小异。\n\n比如下面这段代码:\n\nts\n// 假设当前文件所在路径为 /root/src/modulea\n\nimport { b } from 'moduleb'\n\n\n+ /root/src/node_modules/moduleB.ts\n+ /root/src/node_modules/moduleB.tsx\n+ /root/src/node_modules/moduleB.d.ts\n+ /root/src/node_modules/moduleB/package.json(如果它指定了一个types属性)\n+ /root/src/node_modules/@types/moduleB.d.ts\n+ /root/src/node_modules/moduleB/index.ts\n+ /root/src/node_modules/moduleB/index.tsx\n+ /root/src/node_modules/moduleB/index.d.ts\n\ntypescript 针对于非相对导入的 moduleb 会按照以上路径去当前路径的 node_modules 中去查找,如果上述仍然未找到。\n\n此时,TS 仍然会按照 node 的模块解析规则,继续向上进行目录查找,比如又会进入上层目录 /root/node_modules/moduleb.ts ...进行查找,直到查找到顶层 node_modules 也就是最后一个查找的路径为 /node_modules/moduleB/index.d.ts 如果未找到则会抛出异常 can't find module 'moduleb'。\n\n> 上述查找规则是基于 tsconfig.json 中指定的 moduleResolution:node,当然还有 classic 不过
19组清风
2022/09/08
1.4K0
巧妙利用TypeScript模块声明帮助你解决声明拓展
Typescript真香秘笈
本文由 IMWeb 首发于 IMWeb 社区网站 imweb.io。点击阅读原文查看 IMWeb 社区更多精彩文章。 1. 前言 2018年Stack Overflow Developer的调研(https://insights.stackoverflow.com/survey/2018/)显示,TypeScript已经成为比JavaScript更受开发者喜爱的编程语言了。 之前我其实对于typescript没有太多好感,主要是认为其学习成本比较高,写起代码来还要多写很多类型声明,并且会受到静态类型检查
用户1097444
2022/06/29
5.7K0
Typescript真香秘笈
[译] 使用 microbundle 打包 TypeScript 组件库
原文:https://codewithhugo.com/microbundle-typescript-npm-module/
江米小枣
2020/08/10
2.5K0
探索 模块打包 exports和require 与 export和import 的用法和区别
   CommoneJS规定每个文件是一个模块。将一个JavaScript文件直接通过script标签引入页面中,和封装成CommonJS模块最大的不同在于:前者的顶层作用域是全局作用域,在进行变量及函数声明时会污染全局环境;而后者会形成一个属于模块自身的作用域,所有的变量及函数只有自己能访问,对外是不可见的。
tandaxia
2020/02/11
1.8K0
探索 模块打包 exports和require 与 export和import 的用法和区别
ES6--Class、Module及常用特性
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
奋飛
2019/08/15
5800
相关推荐
JavaScript 学习-47.export 和 import 的使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验