一,变量声明
TypeScript是JavaScript的超集,在变量声明方式方面,关键字是和JavaScript保持一致的,并且推荐较新的 let
和 const
代替 var
。至于为什么这样做,相信用过JavaScript的应该都知道,这里就不多加赘述了。
区别就在于,TypeScript在定义变量时会声明变量的类型。
举个最简单的例子,在JavaScript中定义一个string,我们是这样写的
let name = 'Kris';
但是在TypeScript中就多了一个类型:
let name: string = 'Kris';
注意,我们在这使用的是string,而不是String。区别我们稍后就讲。也许会有人问
:string
,是不是必须得写呢?这里提前透露一下,有些时候也不是必须的。这里后面文章会讲到。
二,数据类型
保持和JavaScript一致的类型
TypeScript支持与JavaScript几乎相同的原始数据类型。其中包括:布尔值(boolean
),数值(number
),字符串(string),null
,undefined
和 Symbol(ES6中的新类型)。以及对象类型Array和Object
1,boolean类型
使用boolean定义类型,很简单:
let isDone: boolean = false;
isDone = true;
大家再看看下面这个变量的声明有没有什么问题
let testBoolean: boolean = new Boolean();
答案如下:
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
默认情况下,null
和undefined
时所有类型的子类型,他们的值也是null
和undefined
,可以把他们赋值给其他类型的变量。
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是比较喜欢用any
。any
表示可以使任何类型,我不清楚或者不想给他指定类型就可以用这个。
let notSure: any;
// 以下都不回报错
notSure = 1;
notSure = 'a';
notSure = false;
let list: any[] = [2, 'b', true];
4,Void
void
表示没有任何类型,只能赋值undefined
和null
。一般用在函数的返回值类型上;
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。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。