JavaScript 中的有两种数据类型,分别为原始数据类型和对象数据类型。
原始数据类型包括: 布尔值、数值、字符串、null
、undefined
以及 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'.
}