如何导入TypeScript模块

如何导入TypeScript模块?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

ES6 模块导入的限制

如何导入TypeScript模块

我们先来看一个具体的例子:

在 Node 项目里,使用 CommonJS 规范引入一个模块:

constkoa=require('koa')

改写为 TypeScript(1.5+ 版本)时,通常有两种方式:

使用 ES6 模块导入方式:

//allowSyntheticDefaultImports:false
import*askoafrom'koa'

使用 TypeScript 模块导入语法:

importkoa=require('koa')

两者大部分是等价的,但 ES6 规范对 import * as 创建出的模块对象有一点限制。

根据该规范,该模块对象不可被调用,也不可被实例化,它只具有属性。

因此,如果你想调用该对象,或者使用 new 方法,在 allowSyntheticDefaultImports: false 的配置下,应该使用例子中的第二种方式。

2.7 版本对 CommonJs/AMD/UMD 模块导入的增强

在之前的版本,TypeScript 对 CommonJs/AMD/UMD 模块的处理方式与 ES6 模块相同,这会导致一些问题:

  • 如前文所提到的,当导入一个 CommonJs/AMD/UMD 模块时,TypeScript 视 import * as koa from 'koa' 与 const koa = require('koa') 等价,但使用 import * as 创建的模块对象实际上不可被调用以及被实例化。

  • 类似的,当导入一个 CommonJs/AMD/UMD 模块时,TypeScript 视 import foo from 'foo' 与 const koa = require('koa').default 等价,但在大部分 CommonJs/AMD/UMD 模块里,它们并没有默认导出。

在 2.7 的版本里,TypeScript 提供了一个新选项 --esModuleInterop,旨在解决上述问题,当使用该选项,且模块为 CommonJs/AMD/UMD 时,它会导入一个可调用或是可实例化的模块,同时它规定该模块必须作为默认导入:

importkoafrom'koa'
constapp=newkoa()

模块导入仅仅是一些声明类型

在以非相对路径导入一个模块时,你可能会看到 Could not find a declaration file for module 'someModule' 的错误, 此时你可以安装对应模块的声明文件或者写一个包含 declare module 'someModule' 的声明文件。实际上,当我们导入一个模块时:

importkoafrom'koa'
//importkoa=require('koa')

它所做的事情只有两个:

  • 导入模块的所有类型信息;

  • 确定运行时的依赖关系。

当你加载此模块,但并没有使用,或仅当作类型来使用时,编译后,此模块将会被移除。

当不使用时;

importkoafrom'koa'

编译后:

仅当做类型使用时:

importkoafrom'koa'
letk:koa

编译后:

vark

做为值使用时,编译后,此模块将会被保留:

importkoafrom'koa'
constapp=newkoa()

编译后(假设使用 commonjs):

var__importDefault=(this&&this.__importDefault)||function(mod){
return(mod&&mod.__esModule)?mod:{"default":mod};
};
varkoa_1=__importDefault(require("koa"));
vark=newkoa_1.default();

注: __importDefault 为使用 --esModuleInterop 选项时产生的方法。

关于如何导入TypeScript模块问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。

发布于 2021-05-10 20:39:44
收藏
分享
海报
0 条评论
161
上一篇:怎么在Java中批量导入excel表数据 下一篇:怎么在pycharm中导入anacodna环境
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码