Any 类型
- 没有强制限定哪种类型,随时切换类型都可以 我们可以对 any 进行任何操作,不需要检查类型
let anys:any = 123
anys = '123'
anys = true
- 声明变量的时候没有指定任意类型默认为any
let anys;
anys = '123'
anys = true
- 弊端如果使用any 就失去了TS类型检测的作用
unknown 类型
-
TypeScript 3.0中引入的 unknown 类型也被认为是 top type ,但它更安全。与 any 一样,所有类型都可以分配给unknown
-
unknown类型比any更加严格当你要使用any 的时候可以尝试使用unknow
//unknown 可以定义任何类型的值
let value: unknown;
value = true; // OK
value = 42; // OK
value = "Hello World"; // OK
value = []; // OK
value = {}; // OK
value = null; // OK
value = undefined; // OK
value = Symbol("type"); // OK
//这样写会报错unknow类型不能作为子类型只能作为父类型 any可以作为父类型和子类型
//unknown类型不能赋值给其他类型
let names:unknown = '123'
let names2:string = names
//这样就没问题 any类型是可以的
let names:any = '123'
let names2:string = names
//unknown可赋值对象只有unknown 和 any
let bbb:unknown = '123'
let aaa:any= '456'
aaa = bbb
// 这样写会报错,
>
> unknown没有办法读任何属性 方法也不可以调用
let obj:unknown = {"key":true,open:()=>123}
console.log(obj.key);
obj.open();
// any可以
let obj1:any = {"key":true,open:()=>123}
console.log(obj1.key);
obj1.open();
unknown类型不能赋值给其他类型
unknown可赋值对象只有unknown 和 any
unknown没有办法读任何属性 方法也不可以调用
类型等级
- any unknown
- Object
- Number String Boolean
- number string boolean
- 字面值
- never
按照顺序,第一个类型可以包含2,3,4,5,6类型,第二个类型可以包含3,4,5,6类型,以此类推
Number和number区别
在TypeScript中,Number和number都可以用来表示数字类型,但它们的用途和行为有一些不同。
number是一个基本数据类型,用于表示所有数字(包括整数、浮点数等)。当你需要一个数字变量时,通常应该使用number类型。例如:
let x: number = 5;
Number是一个全局对象,它是JavaScript中所有数字值的构造函数。你可以使用Number对象来执行更复杂的操作,如将其他类型的值转换为数字,或检查一个值是否是有限的数字。例如:
let x: Number = Number("5"); // 将字符串转换为数字
let y: boolean = Number.isFinite(1000); // 检查一个值是否是有限的数字
然而,在TypeScript中,Number也可以用作类型,表示任何可以被Number对象包装的值。这包括所有number值,以及Number对象。但是,除非你有特殊的需要,否则通常应该使用number类型,因为它更简单,更符合TypeScript的类型安全性。
总的来说,number和Number在TypeScript中都可以用来表示数字,但number是基本数据类型,而Number是全局对象。在大多数情况下,你应该使用number类型。
为什么应该使用number
在TypeScript(以及JavaScript)中,通常推荐使用number(小写n)而不是Number(大写N)来处理数字,主要有以下几个原因:
-
性能:number是JavaScript的原始数据类型,而Number是一个对象。使用number类型的操作通常比使用Number对象更快,因为原始类型不需要额外的对象包装和解包装过程。
-
简洁性:number类型更简洁,更易于理解。当你看到一个类型为number的变量时,你可以立即知道它是一个数字,而不需要考虑它可能是一个Number对象。
-
类型安全:在TypeScript中,number类型提供了更强的类型安全。如果你尝试将非数字值赋给一个number类型的变量,TypeScript会给出编译错误。而Number对象可以包含任何值,包括非数字值,这可能导致运行时错误。
-
一致性:在JavaScript和TypeScript的社区中,使用number类型是最常见的做法。坚持使用number可以使你的代码更一致,更易于其他开发者理解。
总的来说,虽然Number对象提供了一些额外的功能,但在大多数情况下,使用number类型会更简单,更高效,更安全。
object、Object 以及{}
Object
Object包含所有的类型(基础类型和引用类型),所以它可以指向任何一个值
let a:Object = 123;
let a:Object = '123';
let a:Object = [];
let a:Object = {};
let a:Object = ()=>123;
Object类型是所有Object类的实例的类型。这个类型是跟原型链有关的原型链顶层就是Object,所以值类型和引用类型最终都指向Object,所以他包含所有类型。
object
object 代表所有非值类型的类型,例如 数组 对象 函数等,常用于泛型约束
let a:object = 123';// 错误 原始类型
let a1:object = 123;//错误 原始类型
let a2:object = false;//错误 原始类型
let a3:object = [];//正确
let a4:object = {};//正确
let a5:object = ()=>123;//正确
{}
看起来很别扭的一个东西 你可以把他理解成new Object 就和第一个Object基本一样,包含所有类型
let a:{} = 123;
let a1:{} = '123';
let a2:{} = [];
let a3:{} = {name:1};
tips 以上模式--字面量模式是不能修改值的