interface是用来定义接口类型的
keyof关键字是将interface接口类型的键收集到一个联合类型中
类型推论:ts中内置了一些推论机制
声明变量并赋值的时候会进行推论、基于函数的参数,函数的返回值的推论
作用 利用推论机制简化代码
字面量类型 const声明的数据是常量数据,是不能被修改的
应用场景 :字面量类型 配合 联合类型 做联合类型注解
{
let sex: "男" | "女" ='男'
sex='男'
sex='女'
type Dir='top'|'bottom'|'right'|'left'
function changeDir(direction:Dir){
console.log('改变方向');
}
changeDir('right')
changeDir('left')
}
枚举类型 类似于字面量类型+联合类型
数字枚举: 默认关联的是索引,如果给定了值 以给定了的值为主
字符串枚举:如果给字符传以给定的字符串为主
{
enum Direction{
top=10,
left=20,
right,
bottom
}
function changeDirection(str:Direction){
console.log('改变方向了',str);
}
changeDirection(Direction.top)
changeDirection(Direction.left)
changeDirection(Direction.right)
changeDirection(Direction.bottom)
}
打印结果是 10 ,20 ,21,22
any类型:不推荐使用 有时候数据类型不确定的,可以使用any占位 ,等到数据明确了,再将对应的类型设置给数据
泛型:函数和多种类型协调工作,复用的效果(将类型当作参数传递,就是泛型)
{
function fn<T>(n:T) :T{
return n
}
fn<number>(10)
fn<string>('a')
fn<boolean>(false)
}
元组
元组类似于一个数组,只是每一个索引都预定了数据类型
类型推论
TypeScript里,在有些没有明确指出类型的地方,类型推论会帮助提供类型
keyof
允许我们遍历某种类型的属性,并通过 keyof 操作符提取其属性的名称。keyof 操作符是在 TypeScript 2.1 版本引入的,该操作符可以用于获取某种类型的所有键,其返回类型是联合类型
复杂数据类型
没有明确的对象和明确的属性,一定要做好类型注解
应用场景:ajax请求回来的数据进行赋值的时候
const todos=ref<{id:number,name:string,done:boolean}[]>([])
setTimeout(() => {
todos.value=[{id:1,name:'asd',done:false},{id:2,name:'sda',done:true}]
}, 1000);
事件对象类型就是MouseEvent
可选链操作符
语法 : ?.
作用:当我们操作null | undefined 的时候不想让这个错误出来的时候就可以使用可选链操作符
可选链操作符试着访问某个属性,如果能访问到就输出,访问不到就返回undefined;只能读不能写
非空断言
明确告诉ts这个!.前面的元素是一定从在的,如果报错ts是不管的,他是可读可写的
d.ts(类型注解文件,不能写业务逻辑)
js 只能写业务代码,不能写类型声明(类型注解)
ts 不仅可以写业务代码,还可以做类型声明
d.ts类型声明文件 有分类
1、内置的d.ts类型声明文件,这种d.ts类型声明不需要我们去写
2、第三方包 自带有类型声明文件 这种d.ts类型声明不需要我们去写
2.1 下载第三方包的时候 会跟随包一同下载下来对应的 d.ts文件 例如axios
2.2 有的第三方包 在下载的时候 只会下载对应的js包,对应的d.ts文件需要单独下载 yarn add @types)例如jQuery
3、自己书写的d.ts文件
3.1 维护一些公司老项目,项目接入ts
3.2.数据响应结果