概论
在 TypeScript 中,object
类型是一个非原始类型的标志,表示任何不是 number
、string
、boolean
、symbol
、null
或 undefined
的值。因此,object
类型本身不允许 null
或 undefined
的赋值。
Object
和 {}
类型等同,object
是 TypeScript 限定数组或者对象或者函数的类型。
Object既可以是值也可以是类型,{}是值。
object是类型,不能是值。
代码测试
let ffa: Object;
let ffa2: object;
let ffa3: {};
/**
* 说明 {} 等同 Object,几乎所有值类型都可以分配
*
* object 严格模式限定只能分配对象或者数组
*/
ffa3 = 2342342 // 合法
ffa3 = "sldfjsldfjlsf" // 合法
ffa3 = [] // 合法
// ffa = undefined; // 非法,严格模式
// ffa = null; // 非法,严格模式
ffa = [] // 合法
ffa = {} // 合法
ffa = 424234; // 合法
ffa = "slkjsdjdlf"; // 合法
console.log(ffa, "ffa")
// ffa2 = 234234; // 报错
// ffa2 = "sdlfkjsdfs" // 非法
// ffa2 = undefined; // 非法,严格模式
// ffa2 = null; // 非法,严格模式
ffa2 = [] // 合法
ffa2 = {} // 合法
console.log(ffa2, "ffa2")
解释
-
ffa3
被声明为{}
类型,等同于Object
,因此几乎所有类型的值都可以赋给ffa3
,包括number
、string
和数组。 -
ffa
被声明为Object
类型,与{}
等同,允许分配几乎所有类型的值,但不允许分配null
或undefined
。 -
ffa2
被声明为object
类型,严格限制只能分配对象或数组,不能分配原始类型(如number
、string
)、null
或undefined
。
通过这些测试代码,我们可以看出 Object
和 {}
的宽松性以及 object
类型的严格性。
前端工程师、程序员