JavaScript 中的有两种数据类型,分别为原始数据类型对象数据类型。 原始数据类型包括: 布尔值、数值、字符串、nullundefined 以及 ES6 中的新类型 Symbol 和 ES10 中的新类型 BigInt

布尔值

在 TypeScript 中,使用 boolean 定义布尔值类型:

let isDone: boolean = false;

但是如果调用构造函数来创建布尔值,则会得到一个对象,而不是布尔值:

let isDone: Boolean = new Boolean(1);
console.log(typeof isDone); // "object"

直接调用 Boolean 函数也会得到一个布尔值:

let isDone: boolean = Boolean(1);
console.log(typeof isDone); // "boolean"

数值

使用 number 定义数值类型:

let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
// ES6 中的二进制表示法
let binaryLiteral: number = 0b1010;
// ES6 中的八进制表示法
let octalLiteral: number = 0o744;
let notANumber: number = NaN;
let infinityNumber: number = Infinity;

编译结果:

let decLiteral = 6;
let hexLiteral = 0xf00d;
// ES6 中的二进制表示法
let binaryLiteral = 0b1010;
// ES6 中的八进制表示法
let octalLiteral = 0o744;
let notANumber = NaN;
let infinityNumber = Infinity;

字符串

使用 string 定义字符串类型:

let myName: string = 'Tom';
let myAge: number = 25;

// 模板字符串
let sentence: string = `Hello, my name is ${myName}.
I'll be ${myAge + 1} years old next month.`;
console.log(sentence);

编译结果:

let myName = 'Tom';
let myAge = 25;
// 模板字符串
let sentence = `Hello, my name is ${myName}.
I'll be ${myAge + 1} years old next month.`;
console.log(sentence);

空值

在 TypeScript 中,使用 void 定义空值类型。通常用于函数没有返回值的情况:

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

或者定义一个变量为 void 类型:

let unusable: void = undefined;

在 5.8.3 版本下,void 类型的变量只能赋值为 undefined,不能赋值为 null

任意值 (Any)

任意值(Any)用来表示允许赋值为任意类型。 如果是一个普通类型,在赋值过程中改变类型是不被允许的:

let myFavoriteNumber: number = 7;
myFavoriteNumber = "seven"; // Type 'string' is not assignable to type 'number'.

但如果是 any 类型,则允许被赋值为任意类型。

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

任意值的属性和方法

在任意值上访问任何属性都是允许的

let anyThing: any = 'hello';
console.log(anyThing.myName);
console.log(anyThing.myName.firstName);

也允许调用任何方法

let anyThing: any = 'hello';
console.log(anyThing.myName.firstName());

如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查。

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

联合类型

联合类型(Union Types)允许一个值可以是几种类型中的一种。使用 | 符号来表示联合类型。

let myFavoriteNumber: number | string;
myFavoriteNumber = 7;
myFavoriteNumber = "seven";
function printId(id: number | string) {
    console.log("Your ID is: " + id);
}
printId(101);
printId("202");

访问联合类型的属性或方法

当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法:

function getLength(something: string | number): number {
    return something.length;
    // Property 'length' does not exist on type 'string | number'.
    // Property 'length' does not exist on type 'number'.
}