TypeScript是什么

JavaScript是前端开发的核心语言,但是这门语言天生就存在很多的问题,比如变量提升,不支持类型认证,难以理解的面向对象。

针对这些问题,就出现了TypeScript,它专门针对JavaScript这门脚本语言的不足做出很多的改进,同时新增了一些高级的特性,所以说,TypeScript是JavaScript的超集!

TypeScript如何用

TypeScript作为一门语言,它还不能直接运行在浏览器中,需要对TypeScript进行解析,解析成我们的ES5的语法,才能被浏览器识别并且运行起来。

第一步:安装typescript

npm install -g typescript

第二步:执行ts文件(假如现在就有greeter.ts)

tsc greeter.ts

类型验证

类型验证是目前TypeScript最大的特点。

1、现在定义一个变量,我们可以规定这个变量的类型。

let a: number;
//a现在只能被赋值为一个数字
a = 1;//正确
a = '123'; //错误,因为已经申明了必须是number类型

2、现在定义一个函数,这个函数的返回值可以规定返回值的类型。

//规定了这个函数的返回值类型是number
function fun1(a,b): number{
    return a + b;
}

3、现在也可以对一个函数的参数,进行定义参数的类型

function fun1(a: number, b: number): number{
    return a + b;
}

4、如果一个函数没有返回值,可以定义它的返回值类型为void。

function getName(name): void{
    console.log(name)
}

新的基础类型

之前的基础类型是Number、String、Boolean、Array、Null、Undefined等等

现在新增了Any、Tuple(元组)、enum(枚举)、Void

1、Any
如果你不确定你的变量的类型、或者函数参数、返回值的时候,你就可以把它申明为any类型;

function test(name): any{
    console.log(name)
}

2、Tuple元组
数组一般表示一组相同类型的一个集合。

而元组一般可以表示不同类型的元素的一个集合。

//定义类一个元组,第一项为number类型,第二项为string类型
let x:[number, string];
x = [1, 'maobar_front'];

3、enum枚举
枚举是使用对象的方式表示一组数字。这个数字默认是从0开始。(也可以自定义)

enum Color { Red, Green, Blue };
console.log(Color.red);//0

4、Void
和Any类型相反,表示没有任何类型。

interface

接口的概念,是之前的JavaScript不具备的,它代表了一个类,必须对某些属性或者方法进行实现。

//定义了一个接口
interface Me{
    name: string;
    age: number;
}
//使用类对接口进行实现
class MapbarFront implements Me {
    name: string = 'mapbar_front';
    age: number = 25;
    getName(): void{ 
        console.log(this.name);
    }
}

一般而言,接口可以规定哪些属性是必须实现的,哪些是可选的,其中可选的标记为“?”,例如:

interface Test{
    name: string;
    age?: number;//表示一个类中可以不用实现age属性
}

泛型

泛型是TypeScript的又一大特性

如果传入的数据的类型是string,我返回的结果也是string。如果传入的数据类型是number,那么我返回的结果也是number。其中,any类型不能代替泛型,因为使用any类型,传入的可能是string,返回的可能就是其他的类型数据。

一个标准的泛型定义的语法是:

function identity<T>(arg:T): T{
    return arg
}

如果是用到特殊的属性,比如.length,就要确保你的参数是个数组,如下所示:

function identity1<T>(arg:T[]):T[]{
    console.log(arg.length);
    return arg;
}
console.log(identity1([1,2,3]));

函数类型申明

一个完整的函数类型的申明如下:说明函数的参数,函数的返回值等信息。

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

//推断类型:
let add = function (x: number, y: number): number {
    return x + y;
}

let add1: (x:number,y:number) => number = function (x,y) {
    return x+y
}
//可选参数问题:(下面的add函数y是可选的)
function add(x:number,y?:number): number{
    if(y){
        return x+y;
    }else {
        return x;
    }
}

包含ES6的部分

TypeScript也在积极拥抱ES6的变化,它的发展也在根据JavaScript的语法的演变而进化。

ES6知识模块的概念。import和export。

ES6支持箭头函数。() => {};

ES6支持解构赋值。使用对象或者数组来申明变量。