这是我参与「第五届青训营 」笔记创作活动的第5天
关于TypeScript
什么是TypeScript
- jS是动态类型、弱类型语言
- TS神静态类型、弱类型语言
动态类型:他会在执行的时候再去确认一个变量的类型。如果类型不对便会抛出错误或者自动匹配类型。
静态类型:他在编译的时候就会确定类型,与之类似的有JAVA和Python,他在运行前需要有一个编译的过程
弱类型语言:在运行时会进行类型转换。比如'1'+1=2
TypeScript的优势
静态类型
- 因为是静态类型,他的可读性更强,基于语法解析TSDoc,ide增强。
- 可维护性增强,在编译阶段就可以暴露错误。
- 在多人合作时可以获得更稳定的开发。
JS的超集
- 包含兼容所有JS特性,支持共存
- 支持渐进式引入与升级,可以将之前写过的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,对于之后的开发会更加的便利和快捷。