在本章中,我们将介绍一些在 JavaScript 代码中最常见的值的类型,并说明在 TypeScript 中描述这些类型相应的方法

以下类型按照其在TypeScript中的等级进行排序

1. 顶级类型:Any、unknow

Any

TypeScript也有一个特殊类型,any,当您不希望某个特定值导致类型检查错误时,可以使用它。

当一个值的类型为 any 时,您可以访问它的任何属性(这些属性反过来又是 any 类型的)。像调用函数一样调用它,将它赋给(或从)任何类型的值,或者几乎任何其他在语法上合法的值:

let obj: any = { x: 0 };
// None of the following lines of code will throw compiler errors.
// Using `any` disables all further type checking, and it is assumed
// you know the environment better than TypeScript.
obj.foo();
obj();
obj.bar = 100;
obj = "hello";
const n: number = obj;

noImplicitAny

如果没有指定类型,并且 TypeScript 无法从上下文推断类型,则编译器通常会默认其类型为Any。

但是,您通常希望避免这种情况,因为任何类型都不会进行类型检查。使用编译器flag noImpicityAny 将任何隐式的 any 标记为错误

unknown

unknown和any一样,可以为其赋任意值,但比any类型更加安全。当不知道一个值是什么类型时,优先使用unknown类型,再考虑any

  1. unknown类型只能赋值给自身或any,不能将其赋给其他类型
let a: unknown = 1;
let b: number = 5;
let c :any = 2;

a = b; // 可以给unknown赋值
b = a; // 但不能给其他类型赋unknown
c = a; // 允许
  1. unknown类型无法读取任何属性,调用方法
let obj: unknown = {property: "1", fn: () => 123}

obj.property // unknown
obj.fn // unknown

2. Object - 大写O

在日常开发中不建议使用该类型