TypeScript入门02 - 基本类型

TypeScript 中,提供了以下基本数据类型:

  • 布尔类型(boolean)
  • 数字类型(number)
  • 字符串类型(string)
  • 数组类型(array)
  • 元祖类型(tuple)
  • 枚举类型(enum)
  • 任意值类型(any)
  • nullundefined
  • void类型
  • never类型

其中元祖、枚举、任意值、void类型和never类型是TypeScript有别于 JavaScript 的特有类型。
TypeScript中声明变量,需要加上类型声明,如booleanstring等。通过静态类型约束,在编译时执行类型检查,这样可以避免一些类型混用的低级错误

1.布尔类型

布尔类型是最简单的数据类型,只有truefalse两种值。
下面定义了一个布尔类型的变量flag,并赋值为true。由于flag被初始化为布尔类型,如果再赋值为非boolean的其他类型值,编译时会抛出错误。

let flag : boolean = true;
flag = 1; //报错,不能把数字类型的值赋给布尔类型的变量。

2.数字类型

TypeScript中,数字都是浮点型。
TypeScript同时支持二进制、八进制、十进制和十六进制字面量,示例代码如下:

let binaryLiteral : number = 0b1010; // 二进制
let octalLiteral  : number = 0o744;  // 八进制
let decLiteral    : number = 6;      // 十进制
let hexLiteral    : number = 0xf00d  // 十六进制

3.字符串类型

TypeScript支持使用单引号(‘)或双引号(“)来表示字符串类型。除此之外,还支持使用模版字符串反引号( ` )来定义多行文本和内嵌表达式。使用 ${expr}的形式嵌入变量或表达式,在处理拼接字符串的时候很有用,示例代码如下:

let name  : string = "Angular";
let years : number = 5;
let words : string = `你好,今年是 ${ name } 发布 ${ years + 1 } 周年`;

4.数组类型

TypeScript数组的操作类似于JavaScript中数组的操作,TypeScript建议开发者最好只为数组元素赋一种类型的值。
TypeScript有两种数组定义方式,示例代码如下:

// 在元素类型后面接上 []
let arr : number[] = [1,2];
// 或者使用数字泛型
let arr : Array = [1,2];

5.元祖类型

元祖类型用来表示已知元素数量和类型的数组,各元素的类型不必相同。
下面定义了一对值分别为字符串和数字类型的元祖,示例代码如下:

let x : [string,number];
x = ['Angular',25]; // 运行正常
x = [10,'Angular']; // 报错
console.log(x[0]);  // 输出 Angular

6.枚举类型

枚举是一个可被命名的整形常数的集合,枚举类型为集合成员赋予有意义的名称,增强可读性。
示例代码如下:

enum Color {Red,Green,Blue};
let c : Color = Color.Blue;
console.log(c); // 输出: 2

枚举默认下标为 0 ,可以手动修改默认下标值,示例代码如下:

enum Color {Red = 2,Green,Blue = 6};
let c : Color = Color.Green;
console.log(c); // 输出: 3

7.任意值类型

任意值是TypeScript针对编程时类型不明确的变量使用的一种数据类型,它常用于以下三种情况。

  • 变量的值会动态变化,比如来自用户的输入或者第三方代码库,任意值类型可以让这些变量跳过编译阶段的类型检查,示例代码如下:
let x : any = 1;     //数字类型
x = "I am a string"; // 字符串类型
x = false;           // 布尔类型
  • 改写现有代码时,任意值允许在编译时可选择地包含或者移除类型检查,示例代码如下:
let x : any = 4;
x.ifItExists(); //正确,ifItExists方法在运行时可能存在,但是这里并不检查
x.toFixed();    //正确
  • 定义存储各种类型数据的数组时,示例代码如下:
let arrayList : any[] = [1,false,"fine"];
arrayList[1] = 100;

8.nullundefined

默认情况下,nullundefined是其他类型的子类型,可以赋值给其他类型,如数字类型等,此时赋值后的类型会变成nullundefined,致力于类型校验的TypeScript设计者们显然不希望这种类型变化给开发者带来额外的困扰。在TypeScript中启用严格的空校验(–strictNullChecks)特性,就可以使得nullundefined只能被赋值给void或本身对应的类型,示例代码如下:

// 启用--strictNullChecks
let x : number;
x = 1;         //运行正确
x = undefined; //运行错误
x = null;      //运行错误

上面例子中变量x只能是数字类型,如果一个类型可能出现null或者undefined,可以用|来支持多种类型,示例代码如下:

// 启用--strictNullChecks
let x : number;
let y : number | undefined;
let z : number | undefined | null;

x = 1;         //运行正确
y = 1;         //运行正确
z = 1;         //运行正确

x = undefined; //运行错误
y = undefined; //运行正确
z = undefined; //运行正确

x = null;      //运行错误
y = null;      //运行错误
z = null;      //运行正确

x = y;         //运行错误
x = z;         //运行错误
y = x;         //运行正确
y = z;         //运行错误
z = x;         //运行正确
z = y;         //运行正确

上面的例子中变量y允许被赋予数字类型或者undefined类型的数据值,而变量z还额外支持nullTypeScript官方建议在编码时,都启用--strictNullChecks特性,这样有利于编写更健壮的代码。

9.void类型

TypeScript中,使用void表示没有任何类型。例如一个函数没有返回值时,意味着返回值类型是void
示例代码如下:

function hello() : void {
    alert("Hello Angular");
}

对于可忽略返回值的回调函数来说,使用void类型会比任意值类型更安全一些。
示例代码如下:

function func(foo:()=>void) {
    let f = foo();  //使用函数foo的返回值
    f.doSth();      //报错,void类型不存在doSth()方法,此时换成任意值类型则不报错
}

10.never类型

never是其他类型(包括nullundefined)的子类型,代表从不会出现的值。这意味着声明为never类型的变量只能被never类型所赋值,在函数中它通常表现为抛出异常或者无法执行到终止点(例如无限循环)。
示例代码如下:

let x : never;
let y : number;

// 运行错误,数字类型不能转为never类型
x = 123;

// 运行正确,never类型可以赋值给never类型
x = (()=>{throw new Error('exception occur')})();

// 运行正确,never类型可以赋值给number类型
y = (()=>{throw new Error('exception occur')})();

// 返回值为never的函数可以是抛出异常的情况
function error(message : string) : never {
    throw new Error(message);
}

// 返回值为never的函数可以是无法被执行到终止点的情况
function loop():never {
    while(true) {

    }
}

你可能感兴趣的:(TypeScript)