TypeScript 旅途1:基础类型

TypeScript

相信你在写JavaScript代码的时候也碰到过很头疼的时刻,好比对象的属性名或方法名大小写错了,或是记不得某个对象有没有某个属性,惧怕最新的ES标准有的浏览器尚未支持...等等种种问题,那么你须要使用TypeScript,你会爱上她的(●'◡'●)。git

  • TypeScript是JavaScript的超级,她是静态类型检查的github

    这就意味着,你的变量、函数参数、返回值等等都是肯定类型的,当你试图使用不兼容的类型,那么你的开发工具会提示你错误,而且拒绝给你编译。typescript

  • 开发工具智能提示express

    主流的开发工具都支持TypeScript,智能提示会让你感受像是在使用Idea来写Java代码同样的享受。编程

  • 方便的代码重构segmentfault

    面向对象与接口编程,拥有很是清晰的代码结构,可读性大大提升。数组

  • 容易上手,初次接触,也能看懂浏览器

    高度兼容原生脚本语法,对语法的破坏性较少,即便没接触过的人,也能很快上手,初次阅读也没有什么障碍。less

本着解决JavaScript的糟糕之处,这注定是个不平凡的开源项目。
Phaser、Cocos2dx、laybox、白鹭等等游戏引擎都有TS版本。更多的使用TypeScript的开源项目能够参考这里函数

关于开发环境搭建与调试配置能够参考这里

下面正式介绍TypeScript的基础类型,不管学习一门什么语言,从基础类型开始都再合适不过了。

  • 先介绍两个关键字let和const
//let const
//let 定义的变量有一个新的变量环境
for (let i = 0; i < 10 ; i++) {
    setTimeout(function() {console.log(i); }, 100 * i);
}

//const 定义的变量属于常量,不能更改
const a: number = 19;
//a = 20;//错误,不容许改变常量
const alian = {
    name: "alian",
    age: 35
}

// 错误,由于alian是const定义的
// alian = {
//     name: "haha",
//     age:22
// }

let定义的变量不会像var定义的变量那样污染全局环境。
const定义一个对象的时候,能够修改对象的属性值,可是不能修改对象引用。

  • 布尔类型
// 布尔类型
 let success: boolean = true;
 let failed: boolean = false;

类型名boolean定义一个布尔类型,值为truefalse。若是不写类型名,则会自动推断出类型。

  • 数字类型
// 数字类型
 let dec: number = 9;//10进制
 let hex: number = 0xABCD;//16进制
 let bin: number = 0b1011;//二进制
 let octal: number = 0o123;//八进制

关键字number定义一个数字类型,值能够是二进制(0b开头)、八进制(0o开头)、十进制、十六进制(0x开头)。

  • 字符串
// 字符串
 let hello: string = "hello";
 let world: string = 'world';
 let today: number = 1.26;
 let express: string = `${hello} ${world}, today is ${today}`;//模版字符串

关键字string定义一个字符串变量。
使用``定义一个多行字符串(能够带有表达式 ${变量名})。

  • 数组
// 数组
 let numbers: number[] = [0x1, 0o32, 0b11, 3, 2, 1];
 let names: string[] = ['ana', 'hello', `${hello} + ${world}`];
 let result: Array<boolean> = [true, false, !1];//数组泛型,Array<元素类型>

类型名称[] 定义一个指定类型的数组。
Array <类型名称> 一样定义一个指定类型的数组。

  • 元组 Tuple
//元组 Tuple
 let x: [string, number, boolean];
 x = ['name', 35, false];
 
 console.log(x[0].substr(1)); //ame
 console.log(x[1].toString()); //35

[类型名、类型名...] 定义一个元组,一个元组里能够包含几个不一样类型的变量。

  • 枚举
//枚举
 enum Color {Red = 1, Green, Blue}
 let color: Color = Color.Blue;
 let color2: string = Color[2];
 console.log(color2); //Green

很是有用的一种类型。关键字enum name{value...} 定义一个枚举。默认状况下,从0开始为元素编号,能够手动设置一个数字编号,后面没有设置编号的会依次往上叠加。
TypeScript 2.4开始支持枚举成员变量包含字符串构造器,如enum Color {Red = 'a', Green = 'b', Blue = 'ccc'},只是每一个元素的编号都要手动设置,须要注意的是字符串枚举成员不能被反向映射到枚举成员的名字。 换句话说,你不能使用 Color["a"] 来获得 "Red" 。。
有了枚举就能够把同类型可是互斥的变量定义成一个枚举,而不用定义成一些变量了(好比描述一个音量开关按钮的开关状态等等)。

  • Any
//Any
 let y: any = 4;
 y = false;
 y = 'type not sure';
 //y.name();
 console.log((y as string).length); //13

 let anyArray: Array<any> = [false, 'true', 23];

虽然是强类型的,可是有了any就有了自由。一个定义为any类型的变量,在使用的过程当中能够改变它的值类型,甚至能够调用它的方法,可是须要当心,若是没有这个方法,会出异常。
不存在的方法

  • Void
//Void
 function noReturn(): void {
     console.log('no return function');
 }

 let useless: void = null;
 useless = undefined;

某种程度上来讲,void类型像是与any类型相反,它表示没有任何类型。好比定义一个方法没有返回值。
声明一个void类型的变量没有什么大用,由于你只能为它赋予undefinednull

  • Null 和 Undefined
//Null 和 Undefined
 let u: undefined = undefined;
 let n: null = null;
 let age: number = undefined;
 let married: boolean = null;

void类似,它们的自己的类型用处不是很大。
默认状况下nullundefined是全部类型的子类型。 就是说你能够把 nullundefined赋值给其它类型(好比numberstring等等)的变量。

  • Never
//Never
 function fail(message: string): never {
    throw new Error(message);
 }

一样是一个没什么用的类型。never类型表示的是那些永不存在的值的类型。 例如, never类型是那些老是会抛出异常或根本就不会有返回值的函数表达式或Lambda表达式的返回值类型。

  • 类型断言
let y: any = 4;
 y = false;
 y = 'type not sure';
 //y.name();
 console.log((y as string).length); //13
 console.log(<string>y.length); //13

当我肯定某个变量是什么类型的时候可使用类型断言,明确告诉编译器我知道它是什么类型。类型断言使用y as string或者 y 两种方式都行。

九层之台,起于垒土,千里之行,始于足下。有了类型基础,就能够对TypeScript进行下一步的观光学习了。
公众号二维码

相关文章
相关标签/搜索