- 引用
- 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: object
let x2: Record<string, unknown> // 推荐
let x3: Record<string, any> // 推荐
// 只能确认变量是一个数组
let x4: object
let x5: unknown[] // 推荐
let x6: any[] // 推荐
// 只能确认变量是一个函数
let x7: object
let x8: (...args: any[]) => any // 推荐
- 在 ts 中,
{}
类型标识一个“空”对象类型,{}
类型是任何非 null
和 undefined
值的超类型。。这意味着任何类型的值都可以赋给 {}
类型的变量。
let a: {} = 1; // ok
let b: {} = "hello"; // ok
let c: {} = []; // ok
let d: {} = {}; // ok
let e: {} = true; // ok
let f: {} = function () { }; // ok
let g: {} = null // 当 "strictNullChecks": true 时会报错
let h: {} = undefined // 当 "strictNullChecks": true 时会报错