TypeScript

说明

TypeScript是JavaScript超集,它具备静态类型分析,能够根据类型在静态代码的解析过程中对ts代码进行类型检查,从而保证类型的一致性。同时TypeScript的代码一定会经过编译为JavaScript代码,才能运行在主流浏览器上。

TypeScript无论有多么庞大的语法体系,多么强大的类型检查,最终的产物都是JavaScript(主流的ts编译方案有2种,分别是官方tsc编译、babel+ts插件编译)。

TypeScript中的模块化,不能和JavaScript中的模块化混为一谈。JavaScript中的模块化方案很多(es6、commonjs、umd等等),所以TypeScript本身在编译过程中,需要指定一种JavaScript的模块化表达,才能编译为对应的代码。也就是说,在ts中的import/export,不能认为和es6的import/export是一样的,他们是完全不同的两个体系,只是语法上类似而已。

环境搭建

下载node

已下载也可以升级npm install -g npm

 D:\workspace\vueweb>npm i -g typescript

D:\workspace\vueweb>tsc -v
Version 4.8.4

类型使用

注意:以下示例都是在*.ts文件中操作。

 

  

 

 

 

// any 表示任意类型,相当于关闭ts类型检测,使用ts时不建议使用any
// let d; 如果不指定类型,则TS解析器会自动判断变量的类型为any(隐式any)
let x: any = 1;    // 数字类型
x = 'I am who I am';    // 字符串类型
x = false;    // 布尔类型

// unknown 表示未知类型 和 any 是有区别的,any会改变被赋值的变量类型

 

 

let a: object;
a = {}
a = function (){

}
// 用来指定对象中包含哪些属性
let b: {name: string};
b = {name:"张三"}

 

/**
 * 数组的类型声明
 */
let f:number[];
let g: Array<number>;
g = [1,2,3];

/**
 * 枚举
 */
enum Gender{
    Male,
    Female
}
let m:{name:string,gender: Gender}
m = {
    name:"",
    gender:Gender.Male
}

 编译

创建tsconfig.json(ts编译器的配置文件,根据它的信息来对代码进行编译),执行tsc -w

{
    // 指定需要编译的文件 ** 任意目录  * 任意文件
    "include": ["./*"],
    // 不需要被编译的文件目录 如:[node_modules,bower_components]
    "exclude": [],
    // 定义被继承的配置文件
    "extends": "",
    // 指定被编译的文件列表,只有被编译的文件少量的时候才会用到
    "files": [],
    "compilerOptions": {
        // 指定被编译为的版本 ES3默认、ES2020、ESNext最新
        "target": "ES6",
        // 指定要使用的模块化的规范 推荐用es6和es2015一样,commonjs
        "module": "ES6",
        // 用来指定项目中要使用的库
        "lib": [],
        // 用来指定编译后文件所在的目录
        "outDir": "./dist",
        // 将所有的全局作用域中的代码合并为一个文件
        "outFile": "./dist/app.js",
        // 是否对js进行编译,默认是false
        "allowJs": false,
        // 是否检查js代码是否符合语法规范,默认是false
        "checkJs": false,
        // 是否移除注释
        "removeComments": false,
        // 不生成编译后的文件
        "noEmit": false,
        // 当有错误不生成编译后的文件
        "noEmitOnError": false,
        // 是否启用严格模式
        "alwaysStrict": false,
        // 不允许隐式的any类型
        "noImplicitAny": true,
        // 不允许不明确类型的this
        "noImplicitThis": true,
        // 严格检查空值
        "strictNullChecks": true,
        // 所有严格检查的总开关,开着,前面有些就可以不用配置了
        "strict": true

    }

}

webpack

详情可以学习webpack/babel/es/vue等

D:\workspace\vuelearn\webpack>npm init -y
Wrote to D:\workspace\vuelearn\webpack\package.json:

{
  "name": "webpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}


D:\workspace\vuelearn\webpack>cnpm i -D webpack webpack-cli typescript ts-loader
√ Installed 4 packages
√ Linked 126 latest versions
√ Run 0 scripts
anti semver webpack@5.74.0 › @types/eslint-scope@3.7.4 › @types/estree@* delcares @types/estree@*(resolved as 1.0.0) but using ancestor(webpack)'s dependency @types/estree@^0.0.51(resolved as 0.0.51)
anti semver webpack@5.74.0 › @types/eslint-scope@3.7.4 › @types/eslint@8.4.10 › @types/estree@* delcares @types/estree@*(resolved as 1.0.0) but using ancestor(webpack)'s dependency @types/estree@^0.0.51(resolved as 0.0.51)
√ All packages installed (133 packages installed from npm registry, used 6s(network 6s), speed 2.9MB/s, json 130(2.55MB), tarball 14.89MB)

【长文详解】TypeScript与Babel、webpack的关系以及IDE对TS的类型检查 - 知乎

SCSS => CSS

sass(scss新的) 、less、stylus

增加了变量、嵌套等语法,对css增强

sass-loader sass

Babel

把js最新的语法,转换成老的ES5、ES3等语法,可以用Babel转换每年新增的语法到老浏览器支持

babel-loader @babel/core @babel/preset-env 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天都要有成长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值