Any 类型 和 unknown 顶级类型

// nodejs 环境执行tsnpm i @types/node --save-dev (node环境支持的依赖必装)npm i ts-node --g

1.top type 顶级类型 any unknown
2.0bject
3.Number String Boolean
4.number string boolean
5. 1 lx false
6.never

Any 类型

没有强制限定哪种类型,随时切换类型都可以我们可以对 any 进行任何操作,不需要检查类型。

声明变量的时候没有指定任意类型默认为any。

弊端如果使用any 就失去了TS类型检测的作用。

let anys:any = 'lx'anys = 'zy'anys = true

Unknown 类型

TypeScript 3.0中引入的 unknown 类型也被认为是 top type ,但它更安全。与 any 一样,所有类型都可以分配给unknown。

unknow类型比any更加严格当你要使用any 的时候可以尝试使用unknow。

//unknown 可以定义任何类型的值let value: unknown; value = true; // OKvalue = 1; // OKvalue = "lx";// OKvalue = []; // OKvalue = {}; // OKvalue = null; // OKvalue = undefined;// OKvalue = Symbol("key"); // OK // 这样写会报错unknow类型不能作为子类型只能作为父类型 any可以作为父类型和子类型// unknown类型不能赋值给其他类型let names:unknown = '123'let names2:string = names // 这样就没问题 any类型是可以的let names:any = '123'let names2:string = names// unknown可赋值对象只有unknown 和 anylet bbb:unknown = 'lx'let aaa:any= 'zy' aaa = bbb

Any 、Unknown 顶级类型的区别?

  • 没有强制限定哪种类型,随时切换类型都可以 我们可以对 any 进行任何操作,不需要检查类型。

  • 声明变量的时候没有指定任意类型默认为any 、弊端如果使用any 就失去了TS类型检测的作用

  • unknown 只能赋值给自身 或者是 any

  • unknown 没有办法读取任何属性方法

  • unknownany 更加安全

/* any 类型*/let a: any = 1let b: number = 5//可以交换a = bb = aconsole.log(a, b); // 5 5 /*unknown 只能赋值给自身 或者是 any 类型*/let a: unknown = 1let b: number = 5//可以交换a = b// 不允许赋值给别的的类型的 b = a// 更改unknown 只能赋值给自身 或者是 any 类型 let a: unknown = 1let b: any = 5a = bb = a// any 是可以掉任何属性和方法的 let zy_s: any = { type: true, open: () => '你真的好坏哦!'}// unknown 没办法读任何属性方法、方法也不可以调用“zy”的类型为“未知”。console.log(zy_s.open());// 你真的好坏哦!let zy: unknown = { type: true, open: () => '你真的好坏哦!'}//unknown 没办法读任何属性方法、方法也不可以调用“zy”的类型为“未知”。console.log(zy.open());

TIPS 注意:

  1. any和 unknown是 TypeScript 中的顶级类型。它们之间的区别在于:
  2. any类型可以是任何类型,它允许在编译时绕开类型检查,因此不安全,因为它可以代表任何值。
  3. unknown类型也可以是任何类型,但是在使用它之前必须进行类型检查或类型断言,否则无法在 TypeScript 中使用。这使得它更加安全,因为您必须在运行时显式地处理它。
  4. 因此,如果您需要一个变量可以具有任何类型并且不受类型检查限制,则可以使用 any类型。但是,如果您需要在尽可能安全的情况下处理不确定的值,则应该使用 unknown类型,因为您必须明确处理它才能使用它。
  5. 总之,推荐尽可能避免使用 any类型,并尽可能使用更安全的 unknown类型。