object类型能存储所有非基础类型数据,以下定义和调用全部合法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| let a: object
a = {} console.log(a)
a = [1, "2"] console.log(a)
a = { name: "abc", age: 18 } console.log(a)
a = () => { console.log("hello world") } (a as Function)()
|
Object类型能存储几乎所有类型数据(除了null和undefined)
直接定义对象,并规定对象中元素的类型和数量:
1 2 3 4 5 6 7 8
| let a : { name : string age : number gender? : string }
a = {'李华',18}
|
可以通过索引签名拓展对象定义方式:
1 2 3 4 5 6 7 8 9 10 11
| let a : {name:string age:number gender?:string [key:number]:string } a = { name:'李华', age:18, 59:'100', 0.5:'158' }
|
数组变量
1 2 3 4 5 6
| let a : Array<number>
let b : string[]
a = [1,2,3] b = ['a','b','c']
|
函数变量
1 2 3 4
| let add: (x: number, y: number) => number add = (x: number, y: number): number => { return x + y }
|
或简写为:
1 2 3
| add = (x, y) => { return x + y }
|
元组(tuple)是一种特殊的数组,定义是可指定数组内元素的数量和类型:
1 2
| let a : [string,...number[],string] a = ['abc',1,2,3,1,3,'wasd']
|
定义元组时也支持用?表示可选对象,但需遵循以下规则:
- 可选元素不能跟在rest(即…string[]类)元素之后
- 必选元素不能位于可选元素之后
枚举(enum)用于定义一组命名常量,编译成js后本质是对象,数字枚举编译后会生成双向映射,若未赋初值则默认值为前一个元素的值+1得到,首个元素的默认值是0,若某元素的值与前面某元素相同,生成映射时前面元素的值会被覆盖
1 2 3 4 5 6
| enum Member { 你 = 0, 我 , 他 = 1, }
|
字符串枚举不会自增和反向映射,所有对象必须都显示赋值
常量枚举编译后会直接变成内联常量,不生成js对象,类似#DEFINE
