一、类型声明
let 变量:类型;
let 变量:类型 = 值;
当类型声明和赋值同时进行时,TS编译器会自动判断变量的类型,类型声明可省略;
当类型声明和赋值同时进行时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错。
二、ts中的类型
1、let c: 'hello' | 'hi'
c = 'hello'
c = 'hi'
c = 'halou' // 报错
2、let a: boolean | string
a = 'hello'
a = true
a = 0 // 报错
// 只声明变量如果不指定类型,则TS解析器会自动判断变量类型为any(隐式的any)
// 不建议使用any
3、let b: any
b = 'hello'
b = true
b = 0
// unknown 表示未知类型的值
4、let d: unknown
d = 'hello'
d = true
d = 0
举例:
let s: string
s = b // b的类型为any,它可以赋值给任意变量
d = 'hello'
s = d // 报错,unknown实际上是一个类型安全的any,不能直接赋值给其他变量
if(typeof d === "string") {
s = d // 正确
}
// 类型断言
s = d as string //正确 类型断言,可以用来告诉解析器变量的实际类型,也可以写成s = <string>d
// void 表示空(undefined、null)
5、function fn():void {}
// never 表示永远不会返回结果
6、function fn2():never {
throw new Error('出错了!')
}
// object表示一个js对象
// {} 用来指定对象中可以包含哪些属性
// ? 可选属性
7、let a: object;
a = {};
a = function (){};
let b: { name: string, age?: number };
b = { name: '孙悟空' }
// [propName: string]: any 表示任意类型的属性
// 必须得有name属性,其他可以随意添加
let c: { name: string, [propName: string]: any }
c = { name: '猪八戒', age: 18, gender: '男' }
// 设置函数结构的类型声明:
// 语法:{形参:类型, 形参:类型...} => 返回值
let d: (a: number, b: number) => number;
d = function(n1:number, n2:number):number {}
// 数组
8、let e: string[]; // 表示字符串数组
let f: number[]; // 表示数值数组,也可以写成 let f: Array<number>
f = [1, 2, 3]
// 元组,固定长度的数组
9、 let g: [string, number]
g = ['hello', 3]
// enum 枚举
enum Gender {
Male = 0,
Female = 1
}
10、let i: { name: string, gender: Gender }
i = {
name: '孙悟空',
gender: Gender.Male
}
console.log(i.gender === Gender.Male) // true
let j: { name:string } & { age: number };
// j = { name: '孙悟空' , age : 18 }
// 类型的别名
type myType = string;
let k: 1 | 2 | 3 | 4 | 5;
let l: 1 | 2 | 3 | 4 | 5;
let m: myType
type myType = 1 | 2 | 3 | 4 | 5;
let k: myType
k = 1