一、原始数据类型
1.原始Javascript基本数据类型(六种)
number、string、boolean、undefined、null、symbol
2.布尔值类型: boolean
let isDone: boolean = false; //ok
let isDone: boolean = Boolean(false); //ok
let isDone: boolean = new Boolean(false); //error
3.数值类型: number
let decLiteral: number = 6;
let notANumber: number = NaN;
let infinityNumber: number = Infinity;
// ES6 中的二进制表示法
let binaryLiteral: number = 0b1010;
// ES6 中的八进制表示法
let octalLiteral: number = 0o744;
4.字符串类型: string
let myName: string = 'Tom';
5.空值: void
function printName(): void {console.log('My name is Tom');
}//声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null:
let unusable: void = undefined;
6.空和未定义:Null和Undefined
let u: undefined = undefined;
let n: null = null;//void 的区别是,undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 number 类型的变量:// 这样不会报错
let num: number = undefined;
// 这样也不会报错
let u: undefined;
let num: number = u;
而 void 类型的变量不能赋值给 number 类型的变量:
let u: void;
let num: number = u;// error: index.ts(2,5): error TS2322: Type 'void' is not assignable to type 'number'.
二、任意值
1.概述:如果是一个普通类型,在赋值过程中改变类型是不被允许的,但如果是 any 类型,则允许被赋值为任意类型。如下例所示:
//普通类型
let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7; // index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.//任意值类型
let myFavoriteNumber: any = 'seven';
myFavoriteNumber = 7; // ok
2.任意值的属性和方法:
概述:声明一个变量为任意值之后,对它的任何操作,返回的内容的类型都是任意值
//访问任何属性
let anyThing1: any = 'hello';
console.log(anyThing1.myName);
console.log(anyThing1.myName.firstName);//访问任何方法
let anyThing2: any = 'Tom';
anyThing2.setName('Jerry').sayHello();
anyThing2.myName.setFirstName('Cat');
3.未声明类型的变量
概述:变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型
let something;
something = 'seven';
something = 7; // ok something.setName('Tom'); //ok
三、类型推论
概述:如果没有明确的指定数据类型,那么TS会依照类型推论的规则推断出一个类型
//被类型推论推论成string类型
let myFavoriteNumber = 'seven';
myFavoriteNumber = 7; // error//上面的式子等价于
let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7; //error
四、联合类型
概述:联合类型表示取值可以为多种类型中的一种,使用 | 分隔每个类型
//允许 myFavoriteNumber 的类型是 string 或者 number,但是不能是其他类型
let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven'; // ok
myFavoriteNumber = 7; // ok
myFavoriteNumber = true; // error
1.访问联合类型的属性或者方法
概述:当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,就只能访问此联合类型的所有类型里共有的属性或方法
function getLength(something: string | number): number {return something.length; //error : property 'length' does not exist on type 'number'
}//访问 string 和 number 的共有属性是没问题的
function getString(something: string | number): string {return something.toString(); // ok
}
2.联合类型的变量赋值
概述:联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型
let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
console.log(myFavoriteNumber.length); // 5myFavoriteNumber = 7;
console.log(myFavoriteNumber.length); // error