1、数据类型 DataType

2、描述对象(使用类型签名和Record)
Object表示的范围太大了(一般不用),可以使用type/interface描述或者class/constructor

type A1 = {[k: string]: number}// 等价于上面的类型声明type A2 = Record<string, number>
3、描述数组(使用[]和Array泛型)
由于Array太不精确,所以一般用Array<T>或string[]或[string, number]来描述数组
type A1 = string[]// 等价于type A2 = Array<string>// 三元组type B1 = [string, number, string]
4、描述函数对象
由于Function太不精确了,一般使用 () => ?来描述函数
type Fn1 = (a: number, b: number) => number// 函数没有return返回值的情况type FnReturnVoid = () => void
type Person = {name: string, sayHi: FnWithThis}type FnWithThis = (this: Person, name: string) => voidconst sayHi: FnWithThis = function() {console.log('hi ' + this.name)}const x: Person = {name: 'frank', sayHi: sayHi}x.sayHi('wu')sayHi.call(x, 'wu')
5、描述其他对象
const d: Date = new Date()const r: RegExp = /ab+c/const r1: RegExp = new RegExp('ab+c')const m: Map<string, number> = new Map()
