[TypeScript] - 基础类型

数据类型

数据类型包括数字、字符串、结构体、布尔值、对象等。

布尔值

布尔值即真(true)或假(false),在 TypeScript 中以 boolean 进行声明。

示例:

let result: boolean = false;

数字

所有的数字都是浮点数,以 number 声明:

let num: number = 6;

字符串

string 声明字符串:

let website: string = "idce.com";

字符串可以使用双引号或单引号,与 JavaScript 一样的是可以使用 `(反引号)声明模板字符串,在模板字符串中使用 ${变量} 的方式获取变量的值。

示例:

let name: string = `idce`;
let sentence: string = `I like ${name}.`

使用模板字符串就不需要用 + 号将字符串拼接在一起了。

数组

数组是一类相同类型数据的集合,有两种方式可以定义数组。

第一种,在元素类型后面接上 [],表示由此类型元素组成的一个数组:

let list: number[] = [1, 2, 3];

第二种方式是使用数组泛型,Array<元素类型>

let list: Array<number> = [1, 2, 3];

元组 Tuple

由于数组是一类相同类型的数据集合,所以无法在一个数组中出现两种不同类型的值,在 TypeScript 中可以使用元组来定义一个包含不同类型数据的集合。

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。

定义一对值分别为string和number类型的元组。

// 声明一个元组类型数据
let x: [string, number];

// 正确的赋值方式
x = ['hello', 10];

// 数据顺序不正确,错误的赋值方式
x = [10, 'hello'];

访问元组数据类似数组,使用下标的方式进行访问。

枚举

使用枚举类型可以为一组数值赋予友好的名字。

enum Color {Red, Green, Blue}
let c: Color = Color.Green;

默认情况下,从 0 开始为元素编号。 你也可以手动的指定成员的数值。 例如,我们将上面的例子改成从 1 开始编号:

enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;

或者全部都采用手动赋值:

enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green;

枚举类型提供的一个便利是你可以由枚举的值得到它的名字。

例如,我们知道数值为 2,但是不确定它映射到 Color 里的哪个名字,我们可以查找相应的名字:

enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];

// 显示'Green'因为上面代码里它的值是2
console.log(colorName);  

任意值

有时我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。

那么我们可以使用any类型来标记这些变量:

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false;

声明数组:

let list: any[] = [1, true, "free"];

list[1] = 100;

空值

某种程度上来说,void 类型像是与 any 类型相反,它表示没有任何类型。 当一个函数没有返回值时,你通常会见到其返回值类型是 void:

function warnUser(): void {
    console.log("This is my warning message");
}

声明一个 void 类型的变量没有什么大用,因为你只能为它赋予 undefined 和 null:

let unusable: void = undefined;

Null 和 Undefined

TypeScript 里,undefined 和 null 两者各自有自己的类型分别叫做 undefined 和 null。 和 void 相似,它们的本身的类型用处不是很大:

let u: undefined = undefined;
let n: null = null;

默认情况下 null 和 undefined 是所有类型的子类型。 就是说你可以把 null 和 undefined 赋值给 number 类型的变量。

Never

never 类型表示的是那些永不存在的值的类型。 例如,never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never 类型,当它们被永不为真的类型保护所约束时。

never 类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是 never 的子类型或可以赋值给 never 类型(除了 never 本身之外)。 即使 any 也不可以赋值给 never。
下面是一些返回 never 类型的函数:

// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
    throw new Error(message);
}

// 推断的返回值类型为never
function fail() {
    return error("Something failed");
}

// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
    while (true) {
    }
}

Object

object 表示非原始类型,也就是除 number,string,boolean,symbol,null 或 undefined 之外的类型。
使用 object 类型,就可以更好的表示像 Object.create 这样的 API。

示例:

declare function create(o: object | null): void;

create({ prop: 0 }); // OK
create(null); // OK

create(42); // Error
create("string"); // Error
create(false); // Error
create(undefined); // Error

讨论

还没有人评论~