ts概述、ts环境准备和编译、ts类型声明( 三 )


3.9 对象类型
使用规定对象类型:
在工作中 , 一般不要轻易给一个参数或变量一个类型 , 它虽然会有类型检查 , 但是它的范围有点的广 , 比如下面这个例子 , 我的目的是定义一个{id:1}的对象 , 但是当赋值为[]时 , 类型检查也会通过 。
// 在工作中 , 一般不要轻易给一个参数或变量一个object类型 , 它虽然会有类型检查 , 但是它的范围有点的广let arg: objectarg = []arg = { id: 1 }
使用{属性:类型,属性:类型}方式规定对象类型:
let arg: { id: number; name: string }arg = { id: 1, name: '张三' }
定义可选属性:
// 对象中的属性 , 有一些属性它是可以定义 , 也可以不定义 可选属性 用?// ?: 可选属性 , 在赋值时 , 可以定义此属性 , 也可以不定义 , 不会报错let arg: { id: number; name: string; age?: number }arg = { id: 1, name: 'aaa', age: 10 }arg = { id: 1, name: 'aaa' }
定义动态属性:
// 没有事前定义的属性 , 它的名称是不确定 , 数据类型不确定 , 现在需要obj对象它可以定义此新添加属性// key的名称我不知道 , 但是类型我是确定的 , stringkey它就是变量// value值 , 类型不确定 , 因为它什么可能都会存在所以规定为any类型// let arg = {id:1,name:'aaa'}// arg['sex'] = '0'// arg['a'] = 1// arg['b'] = true// console.log(arg)// 动态属性,可能还存在多个let arg: { id: number; name: string; [key: string]: any }arg = { id: 1, name: 'aaa' }arg['sex'] = '0'arg['a'] = 1arg['b'] = truearg['aa'] = []console.log(arg) // { id: 1, name: 'aaa', sex: '0', a: 1, b: true, aa: [] }
对象兼容性:
// 对象的兼容性--- 【一个类型是另一个类型的子集/范围广的赋值给范围少的】 如果你想把一个类型赋值给另一个类型 , // 则前提是 , 你当前类型中所有的属性在接受变量类型中都有// 接受者是赋值者的超集就可以let arg1: { id: number; name: string; age: number }let arg2: { id: number; name: string }let arg3: { id: number }arg1 = { id: 1, name: '张三', age: 7 }arg2 = { id: 1, name: '张三' }arg3 = { id: 1 }// arg2赋值给arg1 , 不行 , 会报错// arg1 = arg2// arg1赋值给arg2 , 可行 , 不会报错arg2 = arg1// 不会报错arg3 = arg2
3.10 数组
// 如果直接赋值一个空数组 , 推导出来的为一个any[]let arg = []// 如果赋值一个数字类型的数组 , 推导出来的为一个 number[]// number[]let arg1 = [1, 2]// 规定数组类型方式1:// 定义一个指定类型的数组指定类型 , 没有指定长度 , 它称为数组let arg2: number[] = [1, 2, 3]// 规定数组类型方式2:// Array<类型> 泛型 定义指定类型的数组let arg3: Array = ['a', 'b']
3.11 元组
let arg: [number, string]arg = [1, 'a']// 注意:元组只能是定义出来的 , 推导出来的 , 都为数组 , 比如下面这种写法 , 表示一个数组let arg2 = [1, 'a']