# Typescript 介绍

  • TypeScript 是由微软开发的一款开源的编程语言。
  • TypeScript 是 Javascript 的超集,遵循最新的 ES6、Es5 规范。TypeScript 扩展了 JavaScript的语法。

# Typescript 安装 编译

npm install -g typescript
tsc helloworld.ts

# VSCode 配置

# 汉化

打开VSCode之后在编辑器左侧找到这个拓展按钮,点击,然后在搜索框内搜索关键字"Chinese"。直接点击install安装,安装完成后重启VSCode即可。

# 编辑器配置

# TypeScript相关插件

TSLint(deprecated),通过tslint.json配置,对你的写TypeScript代码风格进行检查和提示的插件。

TSLint Vue,如果你使用TypeScript开发Vue项目,而且要使用TSLint对代码质量进行把控,那你应该需要这个插件。

# 框架相关

如果你使用Vue进行项目开发,那Vue相关的插件也是需要的,比如Vue 2 Snippets

Vetur插件是Vue的开发辅助工具,安装它之后会得到代码高亮、输入辅助等功能。

# 提升开发体验

Auto Close Tag插件会自动帮你补充HTML闭合标签,比如你输完<button>的后面的尖括号后,插件会自动帮你补充</button>;

Auto Rename Tag插件会在你修改HTML标签名的时候,自动帮你把它对应的闭标签同时修改掉;

Bracket Pair Colorizer插件会将你的括号一对一对地用颜色进行区分,这样你就不会被多层嵌套的括号搞晕了,来看看它的样子;

Guides插件能够帮你在代码缩进的地方用竖线展示出索引对应的位置,而且点击代码,它还会将统一代码块范围的代码用统一颜色竖线标出;

# 基于 VSCode 搭建 Typescript 开发环境

# 初始化项目

新建一个文件夹“test”,作为项目根目录,进入这个文件夹:

mkdir test
cd test

# 安装TypeScript

全局安装typescript:

npm install typescript -g

进入项目根目录,生成typescript配置文件;在项目根目录多了一个 tsconfig.json 文件:

tsc --init

因为我们要搭配使用webpack进行编译和本地开发,所以要在项目里安装一下typescript:

npm install typescript

# 配置TSLint

全局安装TSLint:

npm install tslint  -g

进入项目根目录,生成 tslint 配置文件;在项目根目录多了一个 tslint.json 文件:

tslint -i

tslint.json 文件

{
  "defaultSeverity": "error",
  "extends": [
    "tslint:recommended"
  ],
  "jsRules": {},
  "rules": {},
  "rulesDirectory": []
}
  • defaultSeverity:是提醒级别,如果为error则会报错,如果为warning则会警告,如果设为off则关闭,那TSLint就关闭了;
  • extends:可指定继承指定的预设配置规则;
  • jsRules“用来配置对.js和.jsx文件的校验,配置规则的方法和下面的rules一样;
  • rules”是重点了,我们要让TSLint根据怎样的规则来检查代码,都是在这个里面配置,比如当我们不允许代码中使用eval方法时,就要在这里配置"no-eval": true;
  • rulesDirectory:可以指定规则配置文件,这里指定相对路径。

你可以参照TSLint配置说明了解他们的用途。如果你想要查看某条规则的配置及详情,可以参照TSLint规则说明

# 配置webpack

安装 webpack、webpack-cli 和 webpack-dev-server,:

npm install webpack webpack-cli webpack-dev-server -D

安装cross-env,并且后面跟着一个参数 NODE_ENV=development,这个用来在 webpack.config.js 里通过 process.env.NODE_ENV 来获取当前是开发还是生产环境:

npm install cross-env

webpack.config.js配置文件

const HtmlWebpackPlugin = require("html-webpack-plugin");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");

module.exports = {
  // 指定入口文件
  // 这里我们在src文件夹下创建一个index.ts
  entry: "./src/index.ts",
  // 指定输出文件名
  output: {
    filename: "main.js"
  },
  resolve: {
    // 自动解析一下拓展,当我们要引入src/index.ts的时候,只需要写src/index即可
    // 后面我们讲TS模块解析的时候,写src也可以
    extensions: [".tsx", ".ts", ".js"]
  },
  module: {
    // 配置以.ts/.tsx结尾的文件都用ts-loader解析
    // 这里我们用到ts-loader,所以要安装一下
    // npm install ts-loader -D
    rules: [
      {
        test: /\.tsx?$/,
        use: "ts-loader",
        exclude: /node_modules/
      }
    ]
  },
  // 指定编译后是否生成source-map,这里判断如果是生产打包环境则不生产source-map
  devtool: process.env.NODE_ENV === "production" ? false : "inline-source-map",
  // 这里使用webpack-dev-server,进行本地开发调试
  devServer: {
    contentBase: "./dist",
    stats: "errors-only",
    compress: false,
    host: "localhost",
    port: 8089
  },
  // 这里用到两个插件,所以首先我们要记着安装
  // npm install html-webpack-plugin clean-webpack-plugin -D
  plugins: [
    // 这里在编译之前先删除dist文件夹
    new CleanWebpackPlugin({
      cleanOnceBeforeBuildPatterns: ["./dist"]
    }),
    // 这里我们指定编译需要用模板,模板文件是./src/template/index.html,所以接下来我们要创建一个index.html文件
    new HtmlWebpackPlugin({
      template: "./src/template/index.html"
    })
  ]
};

构建指令

{
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "cross-env NODE_ENV=development webpack-dev-server --mode=development --config ./build/webpack.config.js",
    "build": "cross-env NODE_ENV=production webpack --mode=production --config ./build/webpack.config.js"
  }
}

index.html 模板

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>TS-Learning</title>
  </head>

  <body></body>
</html>

index.ts 脚本

// index.ts
let a: number = 123;

const h1 = document.createElement("h1");
h1.innerHTML = "Hello, I am Lison";
document.body.appendChild(h1);
更新时间: 5/13/2020, 11:23:00 PM