TypeScript 旅途1:基础类型

来源:http://www.prospettivedarte.com 作者:计算机教程 人气:168 发布时间:2019-05-10
摘要:相信你在写JavaScript代码的时候也碰到过很头疼的时刻,比如对象的属性名或方法名大小写错了,或是记不得某个对象有没有某个属性,害怕最新的ES标准有的浏览器还没有支持...等等种

皇牌天下投注网 1

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

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

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

  • 开发工具智能提示

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

  • 方便的代码重构

    面向对象与接口编程,拥有非常清晰的代码结构,可读性大大提高。

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

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

本着解决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类型的变量,在使用的过程中可以改变它的值类型,甚至可以调用它的方法,但是需要小心,如果没有这个方法,会出异常。
皇牌天下投注网 2

  • 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或者两种方式都行。

九层之台,起于垒土,千里之行,始于足下。有了类型基础,就可以对TypeScript进行下一步的观光学习了。
皇牌天下投注网 3

本文由皇牌天下投注网发布于计算机教程,转载请注明出处:TypeScript 旅途1:基础类型

关键词:

最火资讯