ts-静态类型检查,自动编译,ts类型 01
1.静态类型检查
在代码运行前进行检查,类型检查发生在编译阶段(ts 转换为js的时候),核心目标就是在代码运行前通过类型注解,检查类型不匹配等,减少运行的时候的异常,提升代码的的可读性与维护性。
浏览器不能直接运行ts,需要编译成js等运行环境执行。
2.自动化编译以及 tsconfig.json
创建自动化编译ts
(1) 创建ts编译控制文件--生成tsconfig.json文件
tsc --init
(2) 监视目录中.ts文件变化
tsc --watch
(3) 编译出错时不生成.js文件
tsc --noEmitOnError --watch
(4) tsconfig.json
{"compilerOptions": {"strict": true, // 启用所有严格类型检查规则(推荐)"noImplicitAny": true, // 禁止隐式 any 类型"strictNullChecks": true, // 严格校验 null/undefined"strictFunctionTypes": true, // 严格校验函数参数类型"skipLibCheck": true // 跳过第三方库的类型检查(提升编译速度)}
}
使用vue 脚手架的时候 使用ts自动 webpack来进行识别编译。
3.类型推断与类型声明
类型推断:ts根据代码,进行类型推断,也就是声明啥类型,就只能存储对应的类型
//类型声明
let a: string
let b: number
let c: boolean//限制函数的传入参数类型与参数数量
function count(x:number,y:number)
{return x+y
}//限制返回值 number
function count(x:number,y:number):number
{return x+y
}//字面量类型
let b:'hello'
b只能存hello
4.js与ts的类型
js数据类型:number string boolean null undefined bigint symbol object
ts数据类型:包含js数据类型新增6个新的类型 any unknown never void tuple enum,两个自定义类型的方式type inter-face
let str1: string //ts官方写法 基本类型
str1 ='hello'let str2:String //包装对象
5.ts类型
1.any类型(任何类型)
一旦给变量设定为any ,变量存储类型不做限定,意味放弃对变量的类型检查。
any类型的变量,可以赋值给任意类型的变量。
2.unknown类型(未知类型)
unknown含义:类型安全的any,适用于:不确定数据的类型。
unknown不能将类型unknow分配给其他类型,强制在使用前进行类型检测。

读取any类型数据的任何属性不会报错,而unknown正好相反

3.never类型(任何值都不是)
never含义:任何值都不是,简而言之就是不能有值,undefined, null,' ',0都不行
4.void(空-函数返回值为空-可以接受undefined)
void通常用于函数返回值的声明,含义【函数不返回任何值,调用者也不应该依赖其返回值进行任何操作】
void是一个广泛的概念,用来表达'空',undefinded空的具体体现之一
5.object【存储非原始类型】
object:能存储的类型是非原始类型,原始类型有【number,string,bollean,null,undefined】
Object:除开null undefined 其他的类型都能存储。

声明对象类型-索引签名[key:string]:any
允许定义对象可以具有任意数量的属性,属性的键和类型可变,具有动态对象的属性。
let person:{name:string,age?:number,[key:string]:any
}person={name:'tom',age,gender:'string',city:'北京'}
声明函数类型-传参类型与返回值类型
let count:(a:number,b:number) => number// TS => 表示函数类型 JS => 定义函数的语法箭头函数count =function(a,b){return a+b
}
声明数组类型
let arr1:string[] //数组里面的元素是string类型
arr1=['a','b']let arr2= Array<number>//数组里面的元素是number类型---泛型
arr2=[100,200]
6.tuple-元组[特殊的数组类型]-非关键词
let arr1:[string,number]//元组
arr1 = ['100',200]let arr2:[string,boolean?]//第二个元素可写可不写
arr2 = ['100',]let arr3:[number,...string]//后续可任意多个string类型
arr3 = [100,'a','b','c']
7.enum-枚举
定义一组命名的常量,提高代码可读性与维护性
数字枚举
打印Direction 左侧为反向映射,右侧为数字枚举的递增性
![]()
enum Direction{Up,//默认从0开始 如果top=1 后续递增Down,Left,Right
}
console.log(Direction.Up)//0
console.log(Direction.[0])//top
function walk(data:Direction){if(data === Direction.Up){}if(data === Direction.Down){}if(data === Direction.Down){}if(data === Direction.Right){}
}
walk(Direction.Up)
字符串枚举-没有反向映射

enum Direction{Up = 'up',Down= 'down',Left = 'left ',Right = 'right '
}
常量枚举-特殊的枚举类型,使用const关键字定义
const enum Direction{Up = 'up',Down= 'down',Left = 'left ',Right = 'right '
}
8.type-任意类型创建别名【或 与】
联合类型-创建一个类型可以是几种不同的类型-【或者】
type Status = number | string //联合类型 一个值可以是几种不同的类型function printStatus(data:Status ):void{console.log(data)
}printStatus(404)printStatus('404')
交叉类型-多个类型合并成一个类型-【并且】
//面积
type Area = {height:number;//高width:number;//宽
}//地址
type Address = {num:number;cell:number;room:string;
}//交叉类型
type House =Area & Addressconst house:House ={height:11,width:22,num:112,cell:234,room:'702'
}