深入浅出webpack学习(13)--使用TypeScript

逆流柯里化
• 阅读 4858

认识TypeScript

TypeScript是JavaScript的一个 超集,主要提供了类型检查系统和对ES6语法的支持。但不支持新的API。目前没有任何环境支持运行原生的TS代码,必须通过构建把它转换成JavaScript代码后才能运行。

下面是一个ts代码:

//show.js
//操作DOM元素,把content显示到网页上
//通过es6模块规范导出show函数
//给show函数增加类型检查

export function show(content: string) {

window.document.getElementById('app').innerText='hello,'+content

}
// main.ts
// 通过 ES6 模块规范导入 show 函数
import {show} from './show';
// 执行 show 函数
show('Webpack');

ts官方提供了能够将ts转换成JavaScript的编译器。你需要在当前项目根目录下新建一个用于配置编译选项的tsconfig.json文件,编译器默认会读取和使用这个文件,配置文件如下:

{

"compilerOptions": {
    "module": "commonjs", //编译出的代码采用的模块规范
    "target": "es5", //编译出的代码采用ES的哪个版本
    "sourceMap": true //输出source map方便调试
},
"exclude": [    //不编译这些目录里的文件
    "node_modules"
]

}

通过**npm install -g typescript**安装编译器到全局后,你可以通过**tsc hello.ts**命令编译出**hello.js**和**hello.js.map**

### 减少冗余代码
TypeScript 编译其会有和在 3-1 使用ES6语言中 Babel 一样的问题:在把 ES6 语法转换成 ES5 语法时需要注入辅助函数, 为了不让同样的辅助函数重复的出现在多个文件中,可以开启 TypeScript 编译器的 importHelpers 选项,修改 tsconfig.json 文件如下:

{

"compilerOptions": {
    "importHelpers" : true
}

}

该选项的原理和babel中介绍的babel-plugin-transform-runtime非常类似,会把辅助函数换成以下语句:

var _tslib = require('tslib');
_tslib._extend(target);


### 集成webpack

要让webpack支持ts,需要解决以下两个问题:
  1. 通过loader把ts转换为JavaScript
  2. webpack在寻找模块对应的文件时需要尝试ts后缀
对于问题1,社区已经出现了几个可用的 Loader,推荐速度更快的 awesome-typescript-loader。 对于问题2,根据2-4 Resolve 中的 extensions 我们需要修改默认的 resolve.extensions 配置项。

const path = require('path');

module.exports = {
// 执行入口文件
entry: './main',
output: {

filename: 'bundle.js',
path: path.resolve(__dirname, './dist'),

},
resolve: {

// 先尝试 ts 后缀的 TypeScript 源码文件
extensions: ['.ts', '.js'] 

},
module: {

rules: [
  {
    test: /\.ts$/,
    loader: 'awesome-typescript-loader'
  }
]

},
devtool: 'source-map',// 输出 Source Map 方便在浏览器里调试 TypeScript 代码
};

在运行构建前需要安装上面用到的依赖:

npm i -D typescript awesome-typescript-loader

点赞
收藏
评论区
推荐文章
皮卡皮卡皮 皮卡皮卡皮
4年前
了解什么是 TypeScript
内容纲要了解什么是TypeScriptTypeScript基本语法TypeScript介绍TypeScript是什么TypeScript是JavaScript的强类型版本。然后在编译期去掉类型和特有语法,生成纯粹的JavaScript代码。由于最终在浏览器中运行的仍然是JavaScript,所以TypeScript并
Jacquelyn38 Jacquelyn38
4年前
Vue3.0系列——「vue3.0学习手册」第一期
Vue3.0一、项目搭建vite是尤大大开发的一款意图取代webpack的工具。其实现原理是利用ES6的import发送请求加载文件的特性。拦截这些请求,做一些编译,省去webpack冗长的打包时间。并将其与Rollup捆绑在一起用于生产。在开发过程中没有捆绑。源代码中的ESImport语法直接提供给浏览器,浏览器通过本机<scriptmodule支持对
威尔we 威尔we
4年前
使用 VS Code 来开发和调试 Python 程序
(简称VSCode)是微软出品的一款支持多种语言的免费IDE(集成开发环境)。VSCode轻量而强大,支持Windows、macOS和Linux。内置支持JavaScript、TypeScript和Node.js,并且拥有一个丰富的插件生态系统来支持其它语言(C/C、C、Java、Python、PHP、Go等)和运行时(.Net和
Stella981 Stella981
4年前
GitHub上的7个热门TypeScript项目,要不要学一下呢?
TypeScript是JavaScript的一个超集,支持ECMAScript6标准(ES6教程)由微软开发的自由和开源的编程语言。设计目标是开发大型应用,它可以编译成纯JavaScript,编译出来的JavaScript可以运行在任何浏览器上。语言特性TypeScript是一种
Stella981 Stella981
4年前
Deno 继颠覆 Node 之后,又“内部”拒绝了 TypeScript
!(https://oscimg.oschina.net/oscnet/6685b21a8f75772aea98ccda4f1a5745411.png)Deno团队计划删除所有内部代码构建时的TS类型检查与捆绑。打算将所有运行时代码转移到同一个JavaScript文件当中,但仍将使用随附的d.ts文件保存类型定义与说明文档。理由
Easter79 Easter79
4年前
TypeScript快速入门
TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript。TypeScript可以在任何浏览器、任何计算机和任何操作系统上运行,并且是开源的。TypeScript是微软开源的,它有这强大的技术后盾。!(https://oscimg.oschina.net/oscnet/3b63ac2b6b7f4c49
Easter79 Easter79
4年前
TypeScript学习笔记
TypeScript学习笔记TypeScript是JavaScript的超集,任何合法的JS程序都是合法的TypeScript程序TypeScript通过向JavaScript增加可选的静态类型声明来把JavaScript变成强类型程序语言。静态类型声明可约束函数、变量、属性等程序实体。TypeScript语言内