TypeScript | 青训营笔记

78 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第5天

关于TypeScript

什么是TypeScript

  • jS是动态类型、弱类型语言
  • TS神静态类型、弱类型语言

动态类型:他会在执行的时候再去确认一个变量的类型。如果类型不对便会抛出错误或者自动匹配类型。

静态类型:他在编译的时候就会确定类型,与之类似的有JAVA和Python,他在运行前需要有一个编译的过程

弱类型语言:在运行时会进行类型转换。比如'1'+1=2

TypeScript的优势

静态类型

  1. 因为是静态类型,他的可读性更强,基于语法解析TSDoc,ide增强。
  2. 可维护性增强,在编译阶段就可以暴露错误。
  3. 在多人合作时可以获得更稳定的开发。

JS的超集

  1. 包含兼容所有JS特性,支持共存
  2. 支持渐进式引入与升级,可以将之前写过的JS代码改进成TS

TypeScript的基本语法

基础数据类型

  • 字符串:string
  • 数字:number
  • 布尔值:boolean
  • null:null
  • undefined:undefined

对象类型

对象类型通常需要先自定义一个interface(接口)。命名前面可以加个I,代表是一个interface类型。

interface IuserInfo {
userName:string;
password:string;
sex:'man'|'woman'|'other';
age:number;
//可选属性
hobby?:string
//只读属性
readonly Id:number;
//任意属性:约束所有对象都必须神该属性的子类型
[key:string]:any;
}

函数类型

在函数内部定义

我们可以在函数内部参数部分可以期望一个类型,也可以定义返回值是什么类型,他有两种写法

function add(x:number,y:number):number {
    return x+y;
}
function add(x:number,y:number) => number = (x,y) => x + y;

使用interface定义

可见,如果用上面两种方法,在复杂函数中,参数比较多的情况下代码的可读性会下降,所以我们也可以使用interface方法来定义函数类型。

interface IAdd {
    (x:number,y:number):number;
}
const add:IAdd = (x,y)=> x+y;

函数重载

我们在写函数时,有些时候会遇到,当参数为string时,我们的返回值神string,参数为number时,返回的是number,那要是使用上面几种方法,我们没办法动态的去实现这个类型的规范。所以便有函数重载这个方法来帮我们解决这个问题。

我们首先需要知道,js中是可以重复定义一个同名函数的,但是在TS中,重复命名必然会报错,但是假若我们不包含函数体,就是{}包含的内容,这样便是一个函数类型的重载。

其实就是一个带有函数体的同名函数。并且这个函数的参数类型要完全包含函数签名所有类型

//我们可以直接通过定义一个函数的方式去进行函数重载
function getDate:(id:number):number;
function getDate:(id:string):string;
function gerDate:(id:number|string):number|string{
    //当是number时返回number,当是string时返回string
}

//我们也可以通过interface包裹起来定义函数重载
interface IGetDate {
     (id:number):number;
     (id:string):string;
     (id:number|string):number|string
}
function getDate:IGetDate = (id) =>{
    //当是number时返回number,当是string时返回string
}

数组类型

  • 类型+方括号: arr:number[];
  • 泛型表达: arr:Array<string|number>
  • 元祖表达: arr: [number,number,string]
  • 接口表达:interface IArr {[key:number]:any}

补充类型

  • 空类型:type IEmpty = () => void
  • 任意类型:any
  • 枚举类型:enum IEnmu {add= '+',mult='-'}
  • 泛型:type INumArr = Array<number>

总结

TypeScript是一个复杂的体系,他里面包含了许多高级的用法,在平时开发我们可能只用到了30%,所以对于TS的学习是一个道阻且长的过程。但是我相信只要用好了TS,对于之后的开发会更加的便利和快捷。