// 直接使用字面量进行类型声明let s: 10 //比较少使用let m: 'male' | 'female'// 联合类型let c: boolean | stringlet d: any //相当于关闭类型检测,表示的是任意类型,在开发时不建议使用,跟js没区别// 声明变量如果不指定类型,则TS解析器会自动判断变量的类型为any(隐式的any)/* 如果不用any的话,还有一个选择,设置其为unknown类型 */let u: unknown// any类型可以赋值给任意变量,但是unkonwn类型不会发生这种情况/* 可以加上判断,这样就不会报错,避免产生其他问题,或者使用断言c = u as string,可以用来告诉解析器变量的实际类型 */// if (typeof u === 'string') {// c = u// }/* 断言有两种用法:第一种用法:c = u as string第二种用法:c = <string>u */// c = <string>u// c = u as string/* void用来表示空,以函数为例,就表示没有返回值的函数 */const i = (): void => {}/* never:表示永远不会返回结果 */const err = (): never => { throw new Error('出错了!')}/* object:表示对象,一般开发中不使用{}用来指定对象中可以包含哪些属性语法:{属性名:属性值,属性名:属性值}要求结构必须一摸一样,必须对照,可以在属性名后面加上问号表示属性名是可选的 */let e: objecte = { a: 1, b: 2 }let f: { c: number, d?: string } //其中?表示该属性名是可选的f = { c: 2 }/* 如果有需求要表示任意类型的属性名就需要写[propName:string]:any */let g: { name: string, [propName: string]: any }g = { name: '穆欣月', age: 88, gender: '未知' }//表示任意类型的属性,后面name属性后可以添加多个声明时未指定的属性let h: (a: number, b: number) => number // 希望h是一个函数,并指定参数和返回值的类型h = (w, i): number => { return w + i}// 设置函数结构的类型声明 语法:(形参:类型,形参:类型。。。)=> 返回值/* 数组类型的声明:两种写法:1.类型[] 2.Array<类型>string[]表示字符串数组number[]表示数字数组 */let arr: string[]arr = ['1', '2', '3']/* tuple(元组)类型就是固定长度的数组:语法:[类型,类型] */let k: [string, string] // let k: [string, string]k = ['1', '2']/* enum枚举: */enum Gender { male = 0, female = 1}let o: { name: string, gender: Gender }o = { name: '穆欣月', gender: Gender.female}let j: string & numberlet jj: { name: string } & { age: number }jj = { name: 'zhang', age: 12}/* 类型的别名:可以简化类型的使用 */type myType = 1 | 2 | 3 | 4 | 5let p: myTypep = 5