1. 引言
由于之前学习 TypeScript 都是断断续续的,当然也完成了一些项目,但是都是很简单的定义类型,然后写代码,并没有深入的理解学习和使用,最近有时间,而且现在大多数框架基本都是使用 TypeScript 开发的,因此决定系统的重新在学习一遍,将细节的东西研究一下,然后输出成文章,这样有助于我的理解。
2. 基础类型
基础类型:string、number、boolean、null、undefined、symbol、bigint!!!
3. 字符串
// 字符串
let name1: string = "Taro";
console.log(name1);
字符串类型没有什么特殊的,基本都知道。
4. 数字
// 数字
let age2: number = 0xf00d; // 十六进制
let age1: number = 25;// 十进制
let age3: number = 0o777; // 八进制
let age4: number = 0b1010; // 二进制
let age5: number = 1e3; // 科学计数法
let age6: number = NaN; // NaN
let age7: number = Infinity; // Infinity
console.log(age1, age2, age3, age4, age5);
console.log(age6, age7);
注意:不管是二进制、八进制、十六进制、科学计数法、NaN 还是 Infinity 都属于数字类型!!!
5. 布尔值
5.1 常见布尔值申明
let isMarried1: boolean = true;
console.log(isMarried1);
5.2 构造函数申明
let isMarried2: Boolean = new Boolean(true);
console.log(isMarried2);
注意,使用构造函数 Boolean 创造的对象不是布尔值!!!
5.3 布尔值申明
可以直接声明,或者使用字面量语法!!!
let isMarried3: boolean = false;
let isMarried4: boolean = Boolean(false);
console.log(isMarried3);
console.log(isMarried4);
6. null
let nullValue1: null = null;
console.log(nullValue1);
7. undefined
let undefinedValue1: undefined = undefined;
console.log(undefinedValue1);
8. void
在 TypeScript 中,可以用 void 表示没有任何返回值的函数。
function sayHello(): void {
console.log("Hello, world!");
}
9. void 和 null 、undefined 的区别
- void 表示没有任何返回值的函数,null、undefined 表示空值。
- 在 TypeScript 中,null 和 undefined 不能赋值给其他类型,只能赋值给 void 和它们自己。
- null 和 undefined 赋值给它们自己。
- 在严格模式下,null 不能 赋予 void 类型。
9.1 将 null 和 undefined 赋值给其他类型
9.2 严格模式下,null 不能 赋予 void 类型
10. Symbol (ES6 新增)
let sym1: symbol = Symbol("key");
console.log(sym1);
11. BigInt (ES2020 新增)
let bigIntValue1: bigint = 12345678901234567890n;
console.log(bigIntValue1);
12. any 类型
- 没有强制限定哪种类型,随时切换类型都可以 我们可以对 any 进行任何操作,不需要检查类型。
- 声明变量的时候没有指定任意类型默认为any。
- 弊端如果使用any 就失去了TS类型检测的作用。
let anyValue1: any = "hello";
anyValue1 = 123;
anyValue1 = true;
console.log(anyValue1);
let anyValue2;
anyValue2 = "hello";
anyValue2 = 123;
anyValue2 = true;
console.log(anyValue2);
13. unknown 类型
- unknown 类型比 any 更加严格当你要使用 any 的时候可以尝试使用 unknown 。
- unknown 类型也被认为是 top type ,但它更安全。与 any 一样,所有类型都可以分配给 unknown。
- unknown 类型不能作为子类型只能作为父类型; any 可以作为父类型和子类型【unknown 类型不能赋值给其他类型】。
- 如果是 any 类型在对象没有这个属性的时候还在获取是不会报错的;如果是 unknown 是不能调用属性和方法。
13.1 unknown 不能赋值给其他子类型
13.2 unknown 可以赋值给 any
13.3 any 类型的对象和 unknown 类型的对象
14. Object
Object 是所有类的基类,所有类的实例都继承自 Object 类!
let obj3: Object = { name: "Taro" };
console.log(obj3);
let obj4: Object = 123;
console.log(obj4);
15. object
object 代表所有非值类型的类型,例如 数组 对象 函数等,常用于泛型约束!
16. {}
{} 和 Object 一样,包含所有类型!
字面量模式是不能修改值的!!!
17. 类型的层级关系
- any unknown
- Object
- Number String Boolean
- number string boolean
- 1 “123” true
- never