1. 引用
      1. ts 装箱类型、拆箱类型
      2. ts any、unknown、object、void、undefined、null 和 never 的类型兼容性
    2. Objectobject{} 这 3 种类型已我被判“死刑”,想不到应用场景,文档看一乐就好
    3. Object 是一个装箱类型
    4. 原型链的顶端是 Object 以及 Function,这也就意味着所有的原始类型与对象类型最终都指向 Object,在 ts 中就表现为 Object 包含了所有的类型
    1. const x1: Object = undefined;
    2. const x2: Object = null;
    3. const x3: Object = 'abc';
    4. const x4: Object = 123;
    5. const x5: Object = { name: 'abc' };
    6. const x6: Object = () => {};
    7. const x7: Object = [];
    1. object 类型代表所有非原始类型的类型,即数组、对象与函数类型
    2. 当你不确定某个变量的具体类型,但能确定它不是原始类型,可以使用 object
    3. 如果你可以确定一个变量不是原始类型,但是可以确定它大概的类型,比如:对象、数组、函数,那么在约束变量时,有很多 object 更准确的类型可供选择。
    1. // 只能确认变量是一个对象
    2. let x1: object
    3. let x2: Record<string, unknown> // 推荐
    4. let x3: Record<string, any> // 推荐
    5. // 只能确认变量是一个数组
    6. let x4: object
    7. let x5: unknown[] // 推荐
    8. let x6: any[] // 推荐
    9. // 只能确认变量是一个函数
    10. let x7: object
    11. let x8: (...args: any[]) => any // 推荐
    1. 在 ts 中,{} 类型标识一个“空”对象类型,{} 类型是任何非 nullundefined 值的超类型。。这意味着任何类型的值都可以赋给 {} 类型的变量。
    1. let a: {} = 1; // ok
    2. let b: {} = "hello"; // ok
    3. let c: {} = []; // ok
    4. let d: {} = {}; // ok
    5. let e: {} = true; // ok
    6. let f: {} = function () { }; // ok
    7. let g: {} = null // 当 "strictNullChecks": true 时会报错
    8. let h: {} = undefined // 当 "strictNullChecks": true 时会报错