// 直接使用字面量进行类型声明
let s: 10 //比较少使用
let m: 'male' | 'female'
// 联合类型
let c: boolean | string
let 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: object
e = { 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 & number
let jj: { name: string } & { age: number }
jj = {
name: 'zhang',
age: 12
}
/* 类型的别名:可以简化类型的使用 */
type myType = 1 | 2 | 3 | 4 | 5
let p: myType
p = 5