EcmaScript 中的数据类型分为原始数据类型 primitive data type 和引用数据类型 object type(对象类型),其中原始数据类型可详细分为:布尔值,数值,字符串, null , undefined , Symbol , BigInt 。
下面介绍常用的前五种原始数据类型在 TypeScript 中的使用。
1 布尔值
let isDone: boolean = true; // 编译后为 var isDone = true;
2 数值
let binaryLiteral: number = 0b1010; // 编译后为 var binaryLiteral = 10;let octalLiteral: number = 0o744; // 编译后为 var octalLiteral = 484;let decLiteral: number = 10; // 编译后为 var decLiteral = 10;let hexLiteral: number = 0xf00d; // 编译后为 var hexLiteral = 0xf00d;let notANumber: number = NaN; // 编译后为 var notANumber = NaN;let infinityNumber: number = Infinity; // 编译后为 var infinityNumber = Infinity;
注意对于 ES6 新增的
0b与0o形式的二进制与八进制,在进行编译后会被转换为十进制。
3 字符串
let str: string = "Hello World";// 编译后为 // var str = "Hello World";let template: string = `Today is ${new Date().toISOString().slice(0, 10)}`;// 编译后为 var template = "Today is " + new Date().toISOString().slice(0, 10);
注意会将 ES6 模板字符串编译为字符串拼接。
4 null 与 undefined
let nul: null = null;let undef: undefined = undefined;
注意与其他原始值类型不同, TypeScript 中的
null,undefined类型为所有类型的子类型(非严格模式 tsconfig.json 中strict: false时,严格模式下编译还是会抛出异常),可以赋值给其他所有类型类型。如
// 下列代码一定要取消 tsconfig.json 中的严格模式 "strict": false ,否则不能赋值let nulB: boolean = null;let undefN: number = undefined;const undefNul: undefined = null;const nulUndef: null = undefined;
5 void
EcmaScript 中没有 Void 概念,在 EcmaScript 中函数没有返回值时,默认隐式返回 undefined ;而在 TypeScript 中,需要给函数显示声明返回值类型,如果遇到无返回值的函数,需声明返回类型为 **void** 。
function print(str: string): void {console.log(str);}
编译后
function print(str) {console.log(str);}
注与 null,undefined 不同, void 不是其他类型的子类,不能赋值给其他类型,它本身也只能被赋值为 null,undefined 。
const vNul: void = null; // 这句要取消严格模式才能通过const vUndef: void = undefined;
6 never
还有一种情况 :never 数据类型,常用于修饰函数返回值,表明函数永远不会返回值(不同于 :void 默认返回 undefined ),常见情况有抛出异常,死循环,无类型空数组等。
function error():never {throw new Error("Somthing wrong");}function loop():never {while(1) {}}const emptyArr: [] = [];console.log(emptyArr.length); // 0// ERROR: 类型“number”的参数不能赋给类型“never”的参数。emptyArr.push(1);
