5

一,变量声明

TypeScript是JavaScript的超集,在变量声明方式方面,关键字是和JavaScript保持一致的,并且推荐较新的 letconst 代替 var 。至于为什么这样做,相信用过JavaScript的应该都知道,这里就不多加赘述了。

区别就在于,TypeScript在定义变量时会声明变量的类型。

举个最简单的例子,在JavaScript中定义一个string,我们是这样写的

let name = 'Kris';

但是在TypeScript中就多了一个类型

let name: string = 'Kris';

注意,我们在这使用的是string,而不是String。区别我们稍后就讲。

也许会有人问:string,是不是必须得写呢?这里提前透露一下,有些时候也不是必须的。这里后面文章会讲到。

二,数据类型

保持和JavaScript一致的类型

TypeScript支持与JavaScript几乎相同的原始数据类型。其中包括:布尔值(boolean),数值(number),字符串(string),nullundefined 和 Symbol(ES6中的新类型)。以及对象类型Array和Object

1,boolean类型

使用boolean定义类型,很简单:

let isDone: boolean = false;
isDone = true;

大家再看看下面这个变量的声明有没有什么问题

let testBoolean: boolean = new Boolean();

答案如下:

image-20191216154818999.png

Boolean是JavaScript中构造函数,new Boolean() 返回的是一个对象。这和上面使用 string 而不是String来声明类型是一个道理。

2,number类型

和JavaScript一样,TypeScript里的所有数字都是浮点数。 这些浮点数的类型是 number。 除了支持十进制和十六进制字面量,TypeScript还支持ES6中引入的二进制和八进制字面量。但是二进制和八进制在编译时会被编译成十进制数字。

let num1: number = 20;
let num2: number =  0xf00d;
let num3: number = 0b1010;
let num4: number =  0o744;

3,string类型

使用单引号或者双引号表示,同时也支持 ES6 的模板字符串。

let str: string = "TypeScript!";
let name: string = 'Kris';

//使用模版字符串拼接
let message: string = `Hello ${name}`;

4,null和undefined

默认情况下,nullundefined 时所有类型的子类型,他们的值也是nullundefined,可以把他们赋值给其他类型的变量。

let u: undefined = undefined;
let n: null = null;

let str = 'hello';
// 编译通过
str = undefined;

5,数组

两种方式,直接使用[] 或者泛型。一般推荐使用第一种方式。

// 元素类型后接[]
let list: string[] = ['a', 'b', 'c'];

//数组泛型 Array<元素类型>
let list: Array<number> = [1, 2, 3];

6, Object

object表示非原始类型,可以用来描述一个对象,因为接口和类的存在,用的不是那么多。不过像Object.create这样的API,就可以用到。

declare function create(o: object | null): void;

// 定义一个空对象
let o: object = {};

7,Symbol类型

Symbol是ES6中新增的一个类型。他的值通过Symbol函数生成,表示独一无二的值。基本用法如下:

let s1 = Symbol();
let s2 = Symbol();

typeof s
// "symbol"

s1 === s2
//false

let sym2 = Symbol("key"); // 可选的字符串key

此处不作详细解释,大家可以去阮一峰的 ES6 入门中关于Symbol的文章。

TypeScript中特有的类型

1,元组Tuple

tuple 可以用来定义一个已知元素数量和类型的数组,类型可以是随意的,但是必须和顺序一一对应。

let t: [string, number, boolean] = [1, 2, 3]; // 会报错

// 正确
let t: [string, number, boolean] = ['a', 2, true];

2,枚举Enum

enum,Java或者C#开发者就很熟悉了。这里先介绍简单的如何定义。还可以通过数值得到定义的string值,这个在实际开发中也用的比较多

enum Fruits {Apple, Banana, Orange}

let a: Fruits = Fruits.Apple; // 0

let o: string = Fruits[2]; // 'Orange'

3,Any

万能的any大法,哈哈。可能直接JavaScript开发者刚接触TypeScript是比较喜欢用anyany表示可以使任何类型,我不清楚或者不想给他指定类型就可以用这个。

let notSure: any;

// 以下都不回报错
notSure = 1;
notSure = 'a';
notSure = false;

let list: any[] = [2, 'b', true];

4,Void

void表示没有任何类型,只能赋值undefinednull。一般用在函数的返回值类型上;

let unusable: void = null;

function showName(): void {

alert('Tom');

}

5,Never类型

never类型表示的是那些永不存在的值的类型。

例如:抛出异常的函数,不会有返回值。以及无限循环的函数。

function throwError(msg: string): never {

throw new Error(msg);

}

// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {

while (true) {
}

}

三,类型断言

有点像强制类型转换的那个意思,但是仅仅是意思。当自己确切的知道某个值的类型时,可以将一个值断言成某种类型。编译器不会进行特殊的数据检查。

两种方式:

// “尖括号”语法
let userName: any = "Mike";
let nameLenght: number = (<string>userName).length

// as语法
let userName1: any = "Mike";
let nameLenght1: number = (userName1 as string).length;

本文对TypeScript 中的常用类型做了简单的介绍,相信已经对TypeScript类型有了初步的理解。接下来的文章在再让我们更深入的学习和使用TypeScript。


Kris
18 声望7 粉丝

前端程序员一枚。欢迎交流