# TypeScript 基础
TS是JS的超集,最主要的变化就是引入了Type,对每个变量可以声明类型,类似于其他面向对象语言(java,C#)。
# 安装配置
1 | npm i typescript -g |
1 | tsc xxx.ts 编译为js然后使用node运行 |
# 类型明确
数据类型 | 关键字 | 描述 |
---|---|---|
任意类型 | any | 声明为 any 的变量可以赋予任意类型的值。 |
数字类型 | number | 双精度 64 位浮点值。它可以用来表示整数和分数。 |
字符串类型 | string | 一个字符系列,使用单引号(’)或双引号(")来表示字符串类型。以及模板字符串: let words: string = 您好,今年是 ${ name } 发布 ${ years + 1} 周年 ;` | |
布尔类型 | boolean | 表示逻辑值:true 和 false。 |
数组类型 | 无 | 声明变量为数组。 // 在元素类型后面加上[] let arr: number[] = [1, 2]; 或者使用数组泛型 let arr: Array<number> = [1, 2]; |
元组 | 无 | 元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同。 let x: [string, number]; x = ['Runoob', 1]; // 运行正常 x = [1, 'Runoob']; // 报错 console.log(x[0]); // 输出 Runoob |
枚举 | enum | 枚举类型用于定义数值集合。 enum Color {Red, Green, Blue}; let c: Color = Color.Blue; console.log(c); // 输出 2 |
void | void | 用于标识方法返回值的类型,表示该方法没有返回值。 function hello(): void { alert("Hello Runoob"); } |
null | null | 表示对象值缺失。 |
undefined | undefined | 用于初始化变量为一个未定义的值 |
never | never | never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。 |
# 定义类型
# 简单变量类型
1 | let sum:number = 0; |
# 对象类型
1 | // 对象的类型 |
可选属性
1 | // {} 指定对象内属性 |
# 枚举类型
1 | //enum 枚举类型 |
# 组合类型
# 聚合
1 | type MyBool = true | false; //自动归类为boolean |
# 泛型
1 | type StringArray = Array<string>; |
# 类型断言
tips: unknown 类型比 any 类型更安全。
1 | let a:any; |
# 编译选项
ts转js的相关配置写在根目录的tsconfig.json中
1 | { |
# 打包配置
使用 webpack 打包
- 初始化
- 安装对应包工具
- 新建配置 webpack.config.js
- 新建配置 tsconfig.json
- 配置 package.json
- 执行 npm run build 开始打包
首先进入项目目录,初始化
npm init -y
然后安装主要包
npm i -D webpack webpack-cli typescript ts-loader
新建 webpack 配置文件 webpack.config.js
1 | // webpack.config.js |
新建 TS 配置文件 tsconfig.json
1 | { |
在 webpack 的 package.json
中配置 scripts, 加上一句
“build”: “webpack”
1 | "scripts": { |
最后执行 npm run build 进行打包 (这里报了一个 warning)
原因是没有指定 mode, 在 webpack.config.js 中设置
1 | module.exports = { |
解决~
# Babel
在 webpack.config.js
中添加以下 loader 配置:
1 | module.exports = { |
然后安装相应的依赖:babel-loader、@babel/core、@babel/preset-env:
1 | npm install --save-dev babel-loader @babel/core @babel/preset-env |
上面是将 babel 的 preset 参数配置在了 webpack.config.js 中,实际上也可以将它按照 babel 配置文件的原则提取出来单独一个 babel.config.json 文件,效果是一样的。
这样就完成了在 webpack 项目中添加 Babel 转换 ES6 + 代码的功能。在 webpack 打包的过程中,会将源代码经由 babel-loader
处理转换为目标代码,这一执行过程对我们来只说是打包时 “顺势而为” 的,我们再也不用关心 Babel 本身的命令细节了。