概述

这是我学习webpack中使用typescript的记录,供以后开发时参考,相信对其他人也有用。

学习typescript建议直接看中文文档英文文档,休闲之余可以看这篇TypeScript 总结博客

安装

在命令行下输入如下内容即可:

  1. npm install -g typescript

tsconfig

首先需要配置tsconfig.json文件,官方常用配置如下。

一般这个时候在命令行输入tsc,npm就会自动把src目录下的所有ts文件编译过来放在built文件夹里面,并且文件夹也会移过来,并且是在同一个命名空间下面(所以不能声明重复的变量方法等)。

  1. {
  2. "compilerOptions": {
  3. //输出目录为build
  4. "outDir": "./built",
  5. //接受js作为输入
  6. "allowJs": true,
  7. //转换为es5
  8. "target": "es5"
  9. //下面为可选的
  10. //模块引用方式为commonjs
  11. "module": "commonjs",
  12. //用mode进行模块解析
  13. "moduleResolution": "node",
  14. //使用sourceMap
  15. "sourceMap": true,
  16. //启用实验性的metadata API
  17. "emitDecoratorMetadata": true,
  18. //启用实验性的装饰器
  19. "experimentalDecorators": true,
  20. //不删去注释
  21. "removeComments": false,
  22. //不启用严格检查
  23. "noImplicitAny": false
  24. },
  25. "include": [
  26. //读取src目录下的所有文件
  27. "./src/**/*"
  28. ]
  29. }

Webpack

在webpack中使用要先安装相关loader,官方建议安装awesome-typescript-loader(因为它比ts-loader更快):

  1. npm install awesome-typescript-loader source-map-loader --save-dev

webpack.config.js设置如下(要把awesome-typescript-loader放在ts的所有loader之前)。

  1. module.exports = {
  2. entry: "./src/index.ts",
  3. output: {
  4. filename: "./dist/bundle.js",
  5. },
  6. // Enable sourcemaps for debugging webpack's output.
  7. devtool: "source-map",
  8. resolve: {
  9. // Add '.ts' and '.tsx' as resolvable extensions.
  10. extensions: ["", ".webpack.js", ".web.js", ".ts", ".tsx", ".js"]
  11. },
  12. module: {
  13. loaders: [
  14. // All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
  15. { test: /\.tsx?$/, loader: "awesome-typescript-loader" }
  16. ],
  17. preLoaders: [
  18. // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
  19. { test: /\.js$/, loader: "source-map-loader" }
  20. ]
  21. },
  22. // Other options...
  23. };

导入导出

官方不建议用module导入导出模块,因为会出现找不到module的报错。官方建议用如下导出导出模块的方式。

  1. //导入
  2. import foo = require("foo");
  3. foo.doStuff();
  4. //导出
  5. function foo() {
  6. // ...
  7. }
  8. export = foo;

其它

连续添加参数

  1. //官方不建议这么做
  2. var options = {};
  3. options.color = "red";
  4. options.volume = 11;
  5. //官方建议这么做
  6. let options = {
  7. color: "red",
  8. volume: 11
  9. };

如果非要按照第一种方法,就需要先添加一个接口(任何这种没有定义的error都可以通过添加类型断言和接口来解决)。

  1. interface Options { color: string; volume: number }
  2. let options = {} as Options;
  3. options.color = "red";
  4. options.volume = 11;

any,Object和{}

从适用范围上来讲,any > Object > {}。

所以一般使用any和{}。

严格检查

严格检查通过如下方法设置:

  1. "compilerOptions": {
  2. //启用严格检查
  3. "noImplicitAny": true,
  4. //启用严格的null和undefined检查
  5. "strictNullChecks": true
  6. }

!可以在严格的null和undefined检查中忽略null和undefined检查

  1. foo.length; // 报错 - 'foo' is possibly 'null'
  2. foo!.length; // 不报错 - 'foo!' just has type 'string[]'

如果函数中的this报错,就在函数参数中给this加上类型断言(一般来说只有在noImplicitThis为true时才会出现这种情况)。

  1. Point.prototype.distanceFromOrigin = function(this: Point, point: Point) {
  2. return this.getDistance({ x: 0, y: 0});
  3. }

webpack中使用typescript的更多相关文章

  1. webpack中typeScript的打包配置

    2018年typescript发展的非常好,js是一门非常灵活的语言,所以一个功能,怎么写都能够写出来,但是这也会导致一个问题,不同人写js的方式不同,那么会导致同一个功能出现的代码风格会迥然不同.这 ...

  2. Webpack的详细配置,[Webpack中各种loader的安装配置]

    在使用webpack的时候,你是不是被以下这种报错所困扰: 注意看 黄色框中标注的 You may need an appropriate loader to handle this file typ ...

  3. 在Vue 中使用Typescript

    Vue 中使用 typescript 什么是typescript typescript 为 javaScript的超集,这意味着它支持所有都JavaScript都语法.它很像JavaScript都强类 ...

  4. Vue 中使用 typescript

    Vue 中使用 typescript 什么是typescript typescript 为 javaScript的超集,这意味着它支持所有都JavaScript都语法.它很像JavaScript都强类 ...

  5. 深入浅出TypeScript(5)- 在React项目中使用TypeScript

    前言 在第二小节中,我们讨论了利用TypeScript创建Web项目的实现,在本下节,我们讨论一下如何结合React创建一个具备TypeScript类型的应用项目. 准备 Webpack配置在第二小节 ...

  6. 如何在Vue项目中使用Typescript

    0.前言 本快速入门指南将会教你如何在Vue项目中使用TypeScript进行开发.本指南非常灵活,它可以将TypeScript集成到现有的Vue项目中任何一个阶段. 1.初始化项目 首先,创建一个新 ...

  7. webpack to package typescript & scss

    Demo2操作手册 本Demo演示如何配合各种loader进行稍复杂的使用 准备环境 初始化环境, cd到demo目录之后, 执行如下命令: npm init -y npm install webpa ...

  8. 从零配置webpack(react+less+typescript+mobx)

    本文目标 从零搭建出一套支持react+less+typescript+mobx的webpack配置 最简化webpack配置 首页要初始化yarn和安装webpack的依赖 yarn init -y ...

  9. Webpack中hash与chunkhash的区别,以及js与css的hash指纹解耦方案

    文件的hash指纹通常作为前端静态资源实现增量更新的方案之一,Webpack是目前最流行的开源编译工具之一,其强大的功能也带来很多坑(当然,大部分麻烦其实都可以在官方文档中找到答案). 比如,在Web ...

随机推荐

  1. 《DOM Scripting》学习笔记-——第三章 DOM

    <Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...

  2. scrapy使用MongoDB简单示例

    1.下载安装MongoDBhttps://www.mongodb.com/download-center#community找到合适的版本下载,安装.安装好之后,找到安装目录下D:\Program F ...

  3. day42 字段的增删改查详细操作

    复习 # 1.表的详细操作 create table nt like ot; # 只复制表的结构包括约束 create table nt select * from ot where 1=2; # 复 ...

  4. hdu 4714 树+DFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 本来想直接求树的直径,再得出答案,后来发现是错的. 思路:任选一个点进行DFS,对于一棵以点u为 ...

  5. 735. Asteroid Collision彗星相撞后的消失数组

    [抄题]: We are given an array asteroids of integers representing asteroids in a row. For each asteroid ...

  6. 54. Spiral Matrix以螺旋顺序输出数组

    [抄题]: Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spi ...

  7. 数据库TCPIP协议开了,但还是远程连不上

    可能是因为开着防火墙 把防火墙关掉,或者参考下面的链接,在防火墙添加例外 https://zhidao.baidu.com/question/394026326542219285.html

  8. [leetcode]366. Find Leaves of Binary Tree捡树叶

    Given a binary tree, collect a tree's nodes as if you were doing this: Collect and remove all leaves ...

  9. canvas(五)createPattern

    /** * Created by xianrongbin on 2017/3/9. * 图片填充 */ var dom = document.getElementById('clock'), ctx ...

  10. Js学习(3) 数组

    数组本质: 本质上数组是特殊的对象,因此,数组中可以放入任何类型的数据,对象,数组,函数都行 它的特殊性在于键名是按次序排列好的整数 从0开始,是固定的,不用指定键名 如果数组中的元素仍是数组,则为多 ...