Typescript基础

1. Typescript是什么?

  • 以JavaScript为基础构建的语言
  • 一个JavaScript的超集(对js进行了扩展,完全支持js,又在js的基础上增添了许多功能,最主要就是在js中引入了类型的概念,让js类型由动态类型变为静态类型,更便于维护与开发)
  • 可以在任何支持JavaScript的平台中执行
  • Typescript扩展了JavaScript,并添加了类型
  • TS不能被JS解析器直接执行,得把TS文件编译为JS

2. Typescript增加了什么?

  • 类型
  • 支持ES的新特性
  • 添加ES不具备的新特性
  • 丰富的配置选项(可以被编译成各种版本的js)
  • 强大的开发工具

3. TypeScript开发环境搭建

3.1 下载node.js

3.2 安装node.js

3.3 使用npm全局安装typescript

  • 进入命令行
  • 输入:npm i -g typescript

3.4 创建一个ts文件

3.5 使用tsc对ts文件进行编译

  • 进入命令行
  • 进入ts文件所在目录
  • 执行命令:tsc xxx.ts

4. TS基本语法

4.1 基本类型

  • 类型声明

    • 类型声明是TS非常重要的一个特点

    • 通过类型声明可以指定TS中变量(参数、形参)的类型

    • 指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错

    • 简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值

    • 语法:具体代码见03 types.ts、04 types.ts

      •   // 声明一个变量a,同时指定它的类型为Number
          let a: number;
          
          // a的类型设置为了number,在以后的使用过程中a的值只能是数字
          a = 10;
          a = 33;
          // a = 'hello'; // 此行代码会报错
          
          let b: string;
          b = 'hello';
          
          // 声明完变量就直接赋值
          let c: boolean = true;
          
          // 如果变量的声明和赋值是同时进行的,ts可以自动对变量类型进行检查
          let d = true;
          d = false;
          // d = 123;  // 会报错
          
          // JS中的函数是不考虑参数的类型和个数的
          function sum(a: number, b: number): number {
              return a + b;
          }
          
          let result = sum(123, 456);
        
  • 自动类型判断

    • TS拥有自动的类型判断机制
    • 当对变量的声明和赋值是同时进行的,TS编译器会自动判断变量的类型
    • 所以如果你的变量的声明和赋值是同时进行的,可以省略类型声明
  • 类型

类型例子描述
number1,-33,2.5任意数字
string“hi”,‘hi’,hi任意字符串
booleantrue,false布尔值true或false
字面量其本身限制变量的值就是该字面量的值
any*任意类型
unknown*类型安全的any
void空值(undefined)没有值(或undefined)
never没有值不能是任何值
object{name:“孙悟空”}任意的js对象
array[1,2,3]任意js数组
tuple[4,5]元素,TS新增类型,固定长度数组
enumenum(A,B)枚举,TS中新增类型

5. 编译选项

5.1 自动编译文件

  • 编译文件时,使用-w指令后,TS编译器会自动监听文件变化,并在文件发生变化的时候对文件进行重新编译。

  • 示例:

    •   tsc xxx.ts -w
      

5.2 自动编译整个项目

  • 如果直接使用tsc指令,则可以自动将当前项目下的所有ts文件编译为js文件。
  • 但是能直接使用tsc命令的前提是,要现在项目根目录下创建一个ts配置文件tsconfig.json(该文件可以通过tsc --init指令快速生成,也可以自行添加)
  • tsconfig.json是一个json文件,添加【配置文件后,只需tsc(或tsc -w)命令即可完成对整个项目的编译。(配空也可)
5.2.1 配置选项:
include
  • 定义希望被编译文件所在的目录

  • 默认值:["**/*"]

  • 示例

    •   "include": ["src/**/*", "tests/**/*"]
      
    • 上述示例中,所有src目录和test目录下的文件都会被编译

exclude
  • 定义需要排除在外的目录

  • 默认值: [“node_modules”, “bower_components”, “jspm_packages”]

  • 示例:

    •   "exclude": ["./src//hello/**/*"]
      
    • 上述示例中,src下hello目录下的文件都不会被编译

extends
  • 定义被继承的配置文件

  • 示例

    •   "extends": "./configs/bass"
      
    • 上述示例中,当前配置文件中会自动包含configs目录下的base.json中的所有配置信息

files
  • 指定被编译文件的列表,只有需要编译的文件少时才会用到

  • 示例

    •   "files": {
            "core.ts",
            "sys.ts",
            "types.ts",
            "parser.ts",
            "binder.ts",
            "tsc.ts"
        }
      
    • 列表中的文件都会被ts编译器所编译

compilerOptions
  • 编译选项是配置文件中非常重要也比较复杂的配置选项

  • 在compilerOptions中包含多个子选项,用来完成对编译的配置

  • 项目选项

    • target

      • 设置ts代码编译的目标

      • 可选值

      • ES3(默认)、ES5、ES6/ES2015、ES7/ES2016、ES2017、ES2018、ES2019、ES2020、ESNext

      • 示例:

        •   "compilerOptions": {
                "target": "ES6"
            }
          
        • 如上设置,我们所有编写的ts代码都会被编译为ES6版本的js代码

    • lib

      • 指定代码运行是所包含的库(宿主环境)

      • 可选值:

        • ES5、ES6/ES2015、ES7/ES2016、ES2017、ES2018、ES2019、ES2020、ESNext、DOM、WebWorker、ScripHost。。。。。。
      • 示例:

        •   "compilerOptions": {
                "target": "ES6",
                "lib": ["ES6","DOM"],
                "outDir": "dist",
                "outFile": "dist/aa.js"
            }
          
    • module

      • 设置编译后代码的使用的模块化标准

      • 可选值:

        • CommonJS、UMD、AMD、System、ES2020、ESNext、None
      • 示例:

        •   "compilerOptions": {
                "module": "CommonJS"
            }
          
    • OutDir

      • 编译后文件的所在目录

      • 默认情况下,编译后的js文件会和ts文件位于相同的目录,设置OutDir后可以改变编译后文件的位置

      • 示例

        •   "compilerOptions": {
                "outDir": "./dist"
            }
          
    • outFile

      • 将代码合并为一个文件

      • 设置outFile后,所有的全局作用域中的代码会合并到同一个文件中

      • 示例

        •   "compilerOptions": {
                "outFile": "./dist/aa.js"
            }
          
        • 注:只支持module值为amd和system的情况下

    • allowJs

      • 是否对js文件进行编译,默认是false
    • checkJs

      • 是否检查js代码是否符合语法规范,默认值是false
    • removeComments

      • 是否移除注释,默认值为false
    • noEmit

      • 不生成编译后的文件,默认值为false
    • noEmitOnError

      • 当有错误时不生成编译文件
    • strict

      • 所有严格模式的总开关,一般都全部打开
    • alwaysStrict

      • 用来设置编译后的文件是否使用严格模式,默认值为false
    • noImplicitAny

      • 不允许隐式的any类型
    • noImplicitThis

      • 不允许不明确类型的this,默认值为false
    • strictNullChecks

      • 严格检查空值(null)

6. 使用webpack打包ts代码

  • 通常情况下,实际开发中我们都需要使用构建工具对待吗进行打包,TS同样也可以结合构建工具一起使用,下边从webpack为例介绍一下如何结合构建工具使用TS

6.1 初始化项目

  • 进入根目录,执行命令(主要作用:创建package.json文件)

    •   npm init -y
      

6.2 下载构建工具

  • cnpm i -D webpack webpack-cli webpack-dev-server typescript ts-loader clean-webpack-plugin html-webpack-plugin

    • 共安装了7个包
      • webpack:构建工具webpack
      • webpack-cli:webpack的命令行工具
      • webpack-dev-server:webpack的开发服务器
      • typescript:ts编译器
      • ts-loader:ts加载器,用于webpack中编译ts文件
      • clean-webpack-plugin:webpack中的清除插件,每次构建都会先清除目录
      • html-webpack-plugin:webpack自动生成html文件的插件
  • 根目录下创建webpack的配置文件webpack.config.js

    •   // 引入一个包
        const path = require("path");
        const { CleanWebpackPlugin } = require("clean-webpack-plugin");
        
        // webpack所有的配置信息都应该写在module.exports中
        module.exports = {
            // 指定入口文件
            entry: "./src/index.ts",
            // 指定打包文件所在目录
            output: {
                // 指定打包文件的目录
                path: path.resolve(__dirname, "dist"),
                // 打包后文件的名字
                filename: "bundle.js",
            },
            // 指定webpack打包时要使用的模块
            module: {
                // 指定要加载的规则
                rules: [
                    {
                        // 指定规则生效的文件
                        test: /\.ts$/, //匹配以.ts结尾的文件
                        // 要使用的loader
                        use: "ts-loader",
                        // 指定要排除的文件
                        exclude: /node_modules/,
                    },
                ],
            },
        };
        
      
  • 自行新增tsconfig.json文件(可以tsc --init快速生成)

  • 在package.json中"scripts"下新增"build":“webpack”

在这里插入图片描述

  • 运行指令npm run build查看是否生成打包文件

6.3 安装babel以兼容浏览器

  • cnpm i -D @babel/core @babel/preset-env babel-loader core-js
// 引入一个包
const path = require("path");
// 引入插件
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
// webpack所有的配置信息都应该写在module.exports中
module.exports = {
    // 指定入口文件
    entry: "./src/index.ts",
    // 指定打包文件所在目录
    output: {
        // 指定打包文件的目录
        path: path.resolve(__dirname, "dist"),
        // 打包后文件的名字
        filename: "bundle.js",
        // 告诉webpack不使用箭头函数
        environment: {
            arrowFunction: false
        }
    },
    // 指定webpack打包时要使用的模块
    module: {
        // 指定要加载的规则
        rules: [
            {
                // 指定规则生效的文件
                test: /\.ts$/, //匹配以.ts结尾的文件
                // 要使用的loader
                use: [
                    // 配置babel
                    {
                        // 指定加载器
                        loader: "babel-loader",
                        // 设置babel
                        options: {
                            // 设置预定义的环境
                            presets: [
                                [
                                    // 指定环境的插件
                                    "@babel/preset-env",
                                    // 配置信息
                                    {
                                        // 要兼容的目标浏览器
                                        targets: {
                                            chrome: "56",
                                            ie: "8",
                                        },
                                        // 指定corejs版本
                                        corejs: "3",
                                        // 使用corejs的方式
                                        useBuiltIns: "entry", // usage-按需加载
                                    },
                                ],
                            ],
                        },
                    },
                    "ts-loader",
                ],
                // 指定要排除的文件
                exclude: /node_modules/,
            },
        ],
    },
    // 配置webpack插件
    plugins: [
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
            // 复制'./src/index.html'文件,并自动引入打包输出的所有资源(JS/CSS)
            template: "./src/index.html",
        }),
    ],
    // 用来设置引用模块
    resolve: {
        extensions: [".ts", "js"],
    },
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值