typeScript
-
typeScript常用类型概述
js已有的类型
-
原始类型: number/string/boolean/null/undefined/symbol
-
对象类型:object(包括,数组,对象,函数等对象)
2.ts新增的类型
-
联合类型,自定义类型(类型别名),接口,元祖,字面量类型,枚举,void,any等
-
类型语法: let xxx:数据类型 = yyy
对于包装类型,ts有更细致的划分
例如:数组类型可以划分为不同原始类型数组 let xxx:number[] = [1,]
联合类型:
需求:一个数组之中既要number类型和string类型
let arr:(number | string)[]= [1,2,'Nihao'] ps:小括号不能少,表示一个整体的条件
|符号是ts中的联合类型,表示几个类型中的一种
类型别名(自定义类型)
当你重复定义一些相同类型的联合类型的时候,用类型别名可以实现复用
type xxx = (number | string) 在想用与xxx相同的类型的时候可以直接将注解类型改成xxx
函数类型
1.单独指定参数和返回值的类型 function add(num1:number,num2:number/*参数的类型*/):number{ }/*这里就是指函数返回值的类型*/ 2.同时指定参数和返回值的类型 const add = ()=>{}//这是一个箭头函数表达式的方式 /*为函数添加类型*/ const add:(num1:number,num2:number)=>string =(num1,num2)=>{} 注意:只适用于函数表达式 ps:可选参数后面加?,但是可选参数只能出现在参数列表的最后,也就是说可选参数后面不能出现必选参数
对象类型
let people:{ name:string; age:number;good():void} = { name:'zfit', age:16, good(){ console.log('good') } } 默认属性和方法都是必选的 ps:可选参数后面加?,但是可选参数只能出现在参数列表的最后,也就是说可选参数后面不能出现必选参数
接口类型
interface 名称 { name:string age:18 good(){} } /*当一个对象类型被多次使用的时候,一般会使用接口来达到类型复用的目的,有点像 联合类型 联合类型也可以达到相同的效果但是有不同点*/ type 名称 = { name:string age:18 good(){} } 不同点:1.接口只能为对象指定类型 2.类型别名不仅可以为对象指定,实际上可以为任意类型指定别名 接口的继承 extends 重复的接口类型可以用继承简化
元组
当你想给一个变量加一个数组类型限制的时候对于数组的个数又无法给出具体限制 元组类型是另一类型的数组,它确切的知道包含多少元素,以及特定索引对应的数据类型 let arr = :[number,number] = [2,3]
字面量类型
const arr = '你好' 这时候arr类型推断的结果是多呢,arr的类型是'你好' 在ts中,很多东西都可以作为变量的类型,如对象,数字 使用场景:字面量配合联合类型一起使用 比如有个函数只能传值'上'或者'下' function chag(direct:'up'|'down'){ }
枚举类型
enum Direction{数据} 定义了一组命名常量,它描述了一个值,该值可以是这些命名常量中的一个,多个 值之间用逗号隔开,之后可以直接用枚举名作为类型注解 !important 数据的值默认是0并且呈现自增的规则,也可以是自定义的字符串,但是不能实现 自增,并且所有数据都必须是字符串
原理:枚举是为数不多的不仅仅是类型的特性还有特定的值 ,当编译的时候会转化为js代码,大体是在js中声明一个对象,然后赋值,枚举本质是一个对象
-
ts高级类型
class类
class Person{ age:number gender:'nan' paly(n:类型):返回类型{ } constructor(age:number/*这些属性最好都加上类型注解不然会默认any*/)//没有返回值类型 } 1.类的继承 extends 2.类的实现接口 implements //和javase的差不多是那个味 2.类的封装 public protected:受保护的,仅仅对其所在类和子类(不是实例对象啊)开放 可以在类或者子类的public方法中调用来提供外部运行 private:只能在自己的类中提供访问,子类也不行,也不允许重载 readonly:只读,只能对属性设置,除了默认值和构造函数都不能修改值 接口和{}表示的对象都能用readonly
类型推论
在ts中类型推论机制,你可以不必特定写出变量的类型限制,节约了时间
常见的2种情况:
1.声明变量并初始化的时候
let age = 18//虽然没有声明类型但是依然受到类型检查和保护的机制
但是当你声明的时候不复制的情况下 就像
...let age;
age = 18;
age = '';
这样就丢失了类型检查和保护的机制,建议手动添加上类型注解
2.在某些函数的返回值的时候可以省略