1. 数组类型
语法两种写法 :
- 数组名:类型[ ]
- 数组名:Array<类型>
let arr: number[]
arr = [1, 2, 3, 4]
let newArr: Array<string> = ['a','b','c']
2. 对象
{} 用来指定对象中可以包含哪些属性
语法:{属性名:属性值}
属性名后面加问号 表示属性可选
当对象属性不确定后续有没有新增时:可以使用 [propName:string]:any
意思是 任意类型的属性,属性名字类型为字符串,
propName随便起的名字不固定,只=只是大家习惯性使用语义话点
let a: object;
a = {}
a = function () { }
let b: { name: string, age?: number }
b = { name: '章三' }
// 后续可增加任意类型属性的声明
let c: { name: string, [propName: string]: any }
c = { name: '李四', age: 123, sex: '男' } // 后面可追加任意属性
3. 函数方法
- 设置函数结构类型声明
- 语法:(形参:类型,形参:类型) =>返回值
// 声明有返回值 👎返回值类型为number
let d: (a: number, b: number) => number
d = function (n1,n2) {
return n1 + n2
}
4. void (空)
void 用来表示空 常用于函数返回值的声明,
下面代码表示函数没有返回值
function fn(): void {
}
5. any
一个变量设置了类型为any相当于对该变量关闭了ts的类型监测,他可以赋值给任意变量
所以使用ts时不建议使用呀any类型
let num: any;
num = 1;
num = false;
num = '123';
num = function() {}
上述num声明类型为any 则num可以赋值任何类型
6. unknown
- unknown 类型实际上就是一个类型安全的any
- unknown类型变量,不能直接赋值给其他变量
- 如果要复制 就要进行判断或者进行断言
let e: unknown;
let s: string;
if(typeof e === 'string'){
s = e
}
7. 断言
语法两种写法 :
- 变量 as 类型 (常用写法)
- <类型>变量
作用:用来告诉解析器变量实际类型
let e: unknown;
let s: string;
s = e as string // 此处如果不进行断言 赋值ts会报错
s = <string>e
8. &表示同时满足
let j: { name: string } & { age: number }
j = { name: '王五', age: 12 }
9. 类型别名
使用类型别名,能够有效减少类型的重复声明
语法: type 自定义类型名 = 类型取值
type mytype = 1 | 2 | 3
let k: mytype;
let h: mytype;
k = 2
h = 3
type myobj = {
name: string,
age: number
}
const obj:myobj ={
name: '小李',
age: 15
}
10. type和接口的区别
1:定义类型范围
interface只能定义对象类型。
type可以声明任何类型,基础类型、联合类型、交叉类型。
// 基础类型(相当于起别名)
type person = 'string';
// 联合类型
interface Dog {
name:string
}
interface Cat {
age:number
}
type animal = Dog | Cat;
// 元祖(指定某个位置具体是什么类型)
type animal = [Dog,Cat];
//交叉类型(多种类型的集合)
type animal = Dog & Cat;
2:合并声明
定义两个同名的type回报异常;
定义两个同名的interface会合并;
interface Dog {
name:string;
}
interface Dog {
age:number
}
// 合并为
interface Dog {
name:string;
age:number;
}
3:扩展性
interface可以使用extends,和implements,进行扩展
// interface extends interface
interface Dog {
name:string;
}
interface Cat extends Dog {
age:number;
}
// interface extends type
type Dog= {name:string};
interface Cat extends Dog {
age:number;
}
但type可以使用交叉类型&进行合并
// type & type
type Dog = {name:string};
type Cat = {age:number} & Dog;
// tyep & interface
interface Dog {
name:string;
}
type Cat = {age:number} & interface;