LayaBox学习小札-02


请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com

TypeScript中文网提供了中文版本的TypeScript教程手册,地址是https://www.tslang.cn/docs/handbook/basic-types.html。本章对一些TypeScript和JavaScript语言中,容易让有C++等强类型静态语言编程经验的人踩坑的地方做一个笔记。

1 基础数据类型

TypeScript的基础类型有boolean、string、number、any、void、undefined、never这几种,其中和其他高级语言基本上一致的类型有boolean,string,number这三个类型,如下代码所示:

1.1 布尔值、字符串、数字类型

let IamTrue : boolean = true;    // 声明为boolean类型且值为真
let IamFalse : boolean = false;  // 声明为boolean类型且值为假

// TypeScript和JavaScript一样,所有的数字都是浮点数,这点和lua语言也是类似的。除了支持十进制和十六进制
// 字面量,TypeScript还支持ECMAScript 2015中引入的二进制和八进制字面量。
let decLiteral: number = 6;          // 十进制格式
let hexLiteral: number = 0xf00d;     // 十六进制格式,0x前缀打头
let binaryLiteral: number = 0b1010;  // 二进制格式,0b前缀打头
let octalLiteral: number = 0o744;    // 八进制格式,0o前缀打头

let myName: string = "Bob";     // 字符串可以以双引号的方式定义
let hisName : string = 'John';  // 字符串可以以单引号的方式定义
name = "smith";

// 和C++等传统语言字符串有区别的是,TypeScript可以用“模板字符串”的形式去定义多行文本,以及可以内嵌可计算
// 的表达式。内嵌可计算表达式比C++字符串的格式化占位符的功能更为强大一些。“模板字符串”用反引号`包围,并且
// 以${ expr }这种形式嵌入表达式,如下代码:

let name: string = 'Smith';
let age: number = 35;
let sentence: string = `Hello, my name is ${ name }.
I'll be ${ age + 1 } years old next month.`;

// 上述的表达式语句声明即赋值且执行可计算表达式,因此上述的语句实质上是等价于下面的代码语句段:
let name: string = 'Smith';
let age: number = 35;
let sentence: string = "Hello, my name is " + name + ".\n" + "I'll be "+
                       (age + 1) + " years old next month.";

1.2 数组和元祖

// 声明数组有两种方法,一种就是用原生语法支持的方式,一种就是使用泛型类Array去定义,分别如下:
let myArray : number[] = [1,2,3,4,5]; // 原生类型
let list: Array<number> = [1, 2, 3];  // Array是一个泛型类,用来定义一个数组

和其他的脚本语言类似,TypeScript也提供了元组(tuple)类型的支持,声明元组的方法如下:

let x: [string, number]; // 声明一个元组类型,由string和number两种类型组合而成
x = ['hello', 10]; // 正确初始化
x = [10, 'hello']; // 不正确的初始化方式,因为要一一对应声明时元组内各分量的类型

console.log(x[0].substr(1)); // 当访问一个已知索引的元素,会得到正确的类型
console.log(x[1].substr(1)); // 错误,因为number类型的数据没有substr方法

// 当访问一个越界的元素,会使用联合类型替代:联合类型是高级主题,在后续章节中进行讨论
x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型
console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toString
x[6] = true; // Error, 布尔不是(string | number)类型

1 变量声明关键字let和var

返回首页
上一章
下一章