一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。以下是我在学习TypeScript入门,根据教程和文档总结的关于ts笔记。方便新人更清晰的进入ts的大门。
TypeScript是什么?
以JavaScript为基础构建的语言,是Jascript的超集,拓展了JavaScript,并添加了类型,可以在任何支持JavaScript的平台中执行,ts不能被js解析器直接执行,需要编译。
TypeScript增加了什么?
- 类型
- 支持ES的新特性
- 强大的开发工具
- 添加ES不具备的新特性
- 丰富的配置选项
TypeScript开发环境搭建
- 下载node.js 并安装
- 使用npm全局安装TypeScript (npm i -g typescript)
- 创建一个ts文件
- 使用tsc对ts文件进行编译
进入命令行--->进入ts文件所在目录--->执行命令:tsc xxx.ts
基本类型
类型声明
类型声明是ts非常重要的一个特点
通过类型声明可以指定ts中变量(参数、形参)的类型
指定类型后,当为变量赋值时,ts编译器会自动检查值是否符合类型声明,符合则赋值,否则报错
简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值
语法:
let 变量:类型;
let 变量:类型 = 值;
function fn(参数:类型,参数:类型):类型{ }
类型
| 类型 | 描述 |
|---|---|
| number | 任意数字 |
| string | 任意字符串 |
| boolean | 布尔值true或false |
| 字面量 | 限制变量的值就是该字面量的值 |
| any | 任意类型 |
| unknown | 类型安全的any |
| void | 没有值(或undefined) |
| never | 不能是任何值 |
| object | 任意的js对象 |
| array | 任意js数组 |
| truple | 元素,ts新增类型,固定长度数组 |
| enum | 枚举,ts中新增类型 |
注意:
- 关于any和unknown
any表示的是任意类型,一个变量设置类型为any后相当于对该变量关闭了ts的类型检测,不建议使用
声明变量如果不指定类型,则ts解析器会自动判断变量的类型为any(隐式的any)
any类型的变量,可以赋值给任意变量。unknown实际上就是一个类型安全的any,unknown类型的变量,不能直接赋值给其他变量\ - 关于void和never
void用来表示空,以函数为例,就表示没有返回值的函数
never表示永远不会返回结果
function fn2():never{
throw new Error('报错了')
}
- 关于object
object表示一个js对象,语法:
{属性名:属性值,属性名?:属性值},在属性名后边加上?,表示属性是可选的,[propName:string]:any 表示任意类型的属性
设置函数结构的类型声明:
语法:(形参:类型,形参:类型……)=>返回值
string[]表示字符串数组
number[]表示数值数组 - 关于使用| 可以使用|来连接多个类型(联合类型)
let b:"male"|"female";
b = "male";
b = "female";
let c:boolean|string;
c = true;
c = "hello";
- 关于数组的类型声明
语法:
类型[]
Array<类型>
string[]表示字符串数组
number[]表示数值数值
let a: srting[];
a = ['1','2'];
let b: number[];
let c: Array<number>;
c = [1,2,3];
- 关于元组:元组就是固定长度的数组
语法:
[类型,类型,类型]
let h: [srting,number];
h = ['hello',123];
- 关于enum枚举
enum Gender{
Male = 0,
Female = 1
}
let i:{name: string,gender:Gender}
i = {
name:'aa',
gender:Gender.Male
}
- &表示同时
let i: {name: string}&{age: number};
i = {name:'aa',age:18};
- 类型的别名
type myType = 1|2|3|4|5;
let k: myType;
- 类型断言,可以用来告诉解析器变量的实际类型
语法:
变量 as类型
<类型>变量
自动类型判断
-
TS拥有自动的类型判断机制
-
当对变量的声明和赋值时同时进行的,ts编译器会自动判断变量的类型
-
所以如果你的变量的声明和赋值同时进行的,可以省略掉类型声明