一,TS干啥的
首先我们要明白TS只是一个JS的超集,它最终也会变成JS。TS的作用就是静态类型,就是将我们的一些参数和变量的类型限制住,防止使用错误类型,简单的说就是对变量和对象的类型进行一个规范。那么为什么要有规范呢,是因为这样更方便开发,我们对数据和方法的规范越多,出错的可能就越少。
TS的作用场景是编辑器,就是我们写代码的地方。它的使用能配合编辑器给我们更好的编码体验。
二,什么时候使用类型注解
类型注解就是TS的类型规范,就像下面这样。
const count:number;
count = 123
我们的TS能够自动地对我们的变量的类型进行推测。比如:
const a = 234
再vscode中TS会告诉我们a是一个number(当我们把鼠标放在a上)。
而我们是否使用类型注解的原则就是:TS是否能够自动分析出变量类型。如果能够分析出,那么就不用注解,如果不能的话就要加上注解。
我举两个例子:
//例子一
const x = 1
const y = 2
const sum = x + y
//例子二
function getSum(a,b){
return a+b;
}
const total = getSum(1,2)
例子一是不需要对sum或者x,y进行注解的,因为TS会自动推断出来;可能理解不了为啥会这样;
看一下例子二可能就懂了,函数getSum的参数a和b我们都不知道是什么类型,而在函数体里执行了a+b,如果我们这里的a和b不是同一类型,比如a是字符串而b是数字或者对象之类的,他们的相加这个逻辑就是错误的,我们的本意是想要两个数字相加,所以这时就要对a和b进行一个限制。
function getSum(a:number,b:number){
return a+b;
}
而对我们的total我们不需要添加注释,因为TS此时已经能够推断出total也是number。
当然我们也习惯对函数的返回值加一个限制以使我们的程序更严谨。
三,接口和类型别名
类型别名:这里我们限制name变量只能是string
type name = string
type login = {
username:string,
password:number
}
接口:一般我们对一个对象使用接口限制。
应用场景:一般对象我都习惯用interface而不是type
interface login{
username:string,
password:number
}
interface person{
name:string,
age:number,
sex?:boolean,//sex可以存在也可以不存在
[propname:string]:any,//允许不同于上三个属性的键为string的属性添加任意个进来
say():string,//f
}
两者的区别:
- 类型别名可以直接给类型。比如我们上面type的第一个例子。而接口必须给对象。