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