TypeScript-any&unknown

any 的使用规则
  • 使用 any 的时候可以最小化 any 的作用范围
function f1() {
  const x: any = expressionReturningFoo();  // Don't do this
  processBar(x);
}

function f2() {
  const x = expressionReturningFoo();
  processBar(x as any);  // Prefer this
}

any 被限制在了函数的参数中,它不会影响函数参数外部对这个变量使用地方的类型(依然是这个变量本来的类型)

  • 使用// @ts-ignore 来忽略下一行的代码检查

  • 不要使用 any 最为函数返回值的类型,它将失去的对任何使用这个返回值的地方的校验

any 和 unknown

TypeScript 3.0 引入了一个顶级的 unknown 类型。 对照于 any,unknown 是类型安全的。 任何值都可以赋给 unknown,但是当没有类型断言或基于控制流的类型细化时 unknown 不可以赋值给其它类型,除了它自己和 any 外。 同样地,在 unknown 没有被断言或细化到一个确切类型之前,是不允许在其上进行任何操作的。

  • 任何类型都可以赋值给 unknown 类型,但是 unknown 类型除了赋值给 any 和它本身之外,不可以赋值给其他类型
const a: any = 1;
let b: unknown;
b = a;
// any类型也可以赋值给unknown类型
```


- 但是any 可以赋值给任意类型,也可以接收任意类型的赋值
  • unknown 在没有明确它类型的情况下,不可以使用上面的任何属性和方法

所以,unknown 比 any 更安全

  • unknown 也可以被使用与双重断言

  • 所以当你不知道一个变量的类型的时候,尽量使用 unknown 来代替 any

  • {}这个类型包含来所有的值,除了 null 和 undefined

  • Object 类型包含了所有的非原始值类型,包含 null,array,objects 但是不包含 undefined

你可能感兴趣的:(TypeScript-any&unknown)