目录
前言
本文收录于TypeScript知识总结系列文章,欢迎指正!
在TS中除了之前的基本类型外,还包含Array(数组),Function(函数),Tuple(元组),Object(对象)等非原始值,他们统称为object类型(对象类型)
这些类型也是TS强类型检查的基础
对象类型
在此之前我们需要了解下面这个概念
Object与object有什么区别?
object是TypeScript中的类型(在JS中不存在),它是非基本数据类型的统称,包括普通对象、数组、函数等等
而Object可以看成是JavaScript中的全局Object对象,它包括所有JavaScript内置的对象类型,我们常说的万物皆对象说的就是Object
一句话总结:Object 包含了所有JavaScript内置对象类型,而object包含了所有非原始类型的值
以下代码可以用上述概念解释
const obj: Object = 1 // 正常运行
const obj1: object = 1 // error 不能将类型“number”分配给类型“object”
言归正传,如果一个变量的类型是object,那么它可以存储任何引用类型的值。示例代码如下:
const obj: object = {} // 对象
const arr: object = [1, 2, 3] // 数组
const fn: object = function () { // 函数
console.log(obj);
}
const tuple: object = ['count', 10] // 元组
const map: object = new Map() // 键值对集合
const set: object = new Set() // 无序集合
上述代码写法不会报错,但是无法使用特有的属性或函数,如执行fn(),会提示无法执行,使用map.set会找不到该函数
解决方法是使用更具象的类型来表示变量,如:
const obj: Object = {}
const arr: number[] = [1, 2, 3]
const fn: Function = function () {
console.log(obj);
}
const tuple: [string, number] = ['count', 10]
const map: Map<number, string> = new Map()
const set: Set<string> = new Set()
obj.valueOf()
arr.push(4)
fn()
tuple.push(1)