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