TypeScript是什么
- TypeScript 是一种由微软开发的自由开源的编程语言,他是JavaScript的一个超集,扩展了JavaScript的语法,主要提供了类型系统和对 ES6 的支持。
- TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。
JavaScript 与 TypeScript 的区别
- TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法,因此现有的 JavaScript 代码可与TypeScript 一起工作无需任何修改,TypeScript 通过类型注解提供编译时的静态类型检查。
- TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript 代码进行编译。
TypeScript 的优势
- 强大的IDE支持:体现在三个特性上,1.类型检查,在TS中允许你为变量指定类型。2.语法提示。3.重构。
- Angular2、vue3的开发语言
TypeScript 的缺点
- 有一定的学习成本,需要理解接口(Interfaces)、泛型(Generics)、类(Classes)、枚举类型(Enums)等前端开发可能不是很熟悉的知识点
TypeScript安装
TypeScript 的命令行工具安装方法如下:
$ npm install -g typescript
以上命令会在全局环境下安装 tsc 命令,安装完成之后,我们就可以在任何地方执行 tsc 命令了。
查看版本
$ tsc -v
编译一个 TypeScript 文件
编译一个 TypeScript 文件很简单,
tsc hello.ts
使用 TypeScript 编写的文件以 .ts 为后缀
TypeScript 用法
使用 : 指定变量的类型,: 的前后有没有空格都可以
let num:number = 15;
num(变量名):number(类型) = 15(具体值)
表示定义一个变量num,指定类型为number;
let str:string = 'abc';
表示定义一个变量str,指定类型为string;
为什么要用到TS
定义一个函数计算二个数据的合计
function sum(x,y){
if(typeof x != 'number') { //对于形参的类型要添加转换
x = parseInt(x);
}
return x+y
};
sum('1',2);
TS的方式,直接约束了类型
function sum2(x:number,y:number){
return x+y
};
各类型定义
1、类型定义
let flag:boolean = false; //布尔类型
let num:number = 15; //数值类型
let str:string = 'abc'; //字符串类型
let str2:string=`hello,${str}`;
let msg:string = `hello,${str},${num}`;
let u: undefined = undefined;
let n: null = null;
任意值
如果是一个普通类型,在赋值过程中改变类型是不被允许的,任意值(Any)用来表示允许赋值为任意
类型。
let a1: string = 'seven';
a1 = 7;//error
但如果是 any 类型,则允许被赋值为任意类型。
let a2: any = 'seven';
a2 = 7;
变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型
let a3;
a3 = 'seven';
a3 = 7;
相当于
let a3:any;
a3 = 'seven';
a3 = 7;
联合类型
表示取值可以为多种类型中的一种
let a4: string | number;
a4 = 'seven';
a4 = 7;
a4 = true; 不行
2、数组类型的定义
在 TypeScript 中,数组类型有多种定义方式,比较灵活。
最简单的方法是使用「类型 + 方括号」来表示数组:
let arr: number[] = [1, 2, 3, 4, 5];
数组的项中不允许出现其他的类型
let arr: number[] = [1, '2', 3, 4, 'a']; //不行
泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。
泛型变量<T> ,<T>表示任何类型
泛型 和 任意参数的区别可参考
TypeScript里的类型为any和泛型的区别 - 简书 (jianshu.com)
let arr:Array<number> =[1,2,3];
定义多个类型
let arr:Array<number|string> =['1',2,3];
3、对象的类型—接口
在面向对象语言中,接口(Interfaces)是一个很重要的概念,它是对行为的抽象
接口(Interfaces)可以用于对「对象的形状(Shape)」进行描述。
接口的定义
接口首字母大写
interface IPerson {
name: string;
age: number;
}
let tom: Person = {
name: 'Tom',
age: 18
};
定义的变量比接口少了一些属性是不允许的
接口能否更灵活?
可选属性:
interface Person2 {
name: string;
age?: number;
}
let tom: Person = {
name: 'Tom',
age: 18 //可用可不用
};
任意属性 :一个接口允许有任意的属性
interface Person3 {
name: string;
age?: number;
[propName: string]: any;
};
需要注意的是,一旦定义了任意属性,那么确定属性和可选属性都必须是它的子属性
4、函数的类型定义
一个函数有输入和输出,要在 TypeScript 中对其进行约束,需要把输入和输出都考虑到
(x:输入参数类型,y:输入参数类型) : number(输出参数类型)
// 有返回值 return 时
function sum1(x: number, y: number): number {
return x + y;
}
// 无返回值
function sum2(x: number, y: any): void {
let a = 0;
if (x > y) {
a = 100;
} else {
a = 10;
}
}
参数默认值
function sum3(x: number=5, y: number): number {
return x + y;
}
let s1 = sum3(1, 2);
可选参数
function sum4(x: number, y?: number): number[] {
return [x,y]
}
let s2 = sum4(1);