EcmaScript 中的数据类型分为原始数据类型 primitive data type 引用数据类型 object type(对象类型),其中原始数据类型可详细分为:布尔值,数值,字符串, nullundefinedSymbolBigInt
下面介绍常用的前五种原始数据类型在 TypeScript 中的使用。

1 布尔值

  1. let isDone: boolean = true; // 编译后为 var isDone = true;

2 数值

  1. let binaryLiteral: number = 0b1010; // 编译后为 var binaryLiteral = 10;
  2. let octalLiteral: number = 0o744; // 编译后为 var octalLiteral = 484;
  3. let decLiteral: number = 10; // 编译后为 var decLiteral = 10;
  4. let hexLiteral: number = 0xf00d; // 编译后为 var hexLiteral = 0xf00d;
  5. let notANumber: number = NaN; // 编译后为 var notANumber = NaN;
  6. let infinityNumber: number = Infinity; // 编译后为 var infinityNumber = Infinity;

注意对于 ES6 新增的 0b0o 形式的二进制与八进制,在进行编译后会被转换为十进制。

3 字符串

  1. let str: string = "Hello World";
  2. // 编译后为 // var str = "Hello World";
  3. let template: string = `Today is ${new Date().toISOString().slice(0, 10)}`;
  4. // 编译后为 var template = "Today is " + new Date().toISOString().slice(0, 10);

注意会将 ES6 模板字符串编译为字符串拼接。

4 null 与 undefined

  1. let nul: null = null;
  2. let undef: undefined = undefined;

注意与其他原始值类型不同, TypeScript 中的 null,undefined 类型为所有类型的子类型(非严格模式 tsconfig.jsonstrict: false 时,严格模式下编译还是会抛出异常),可以赋值给其他所有类型类型。如

  1. // 下列代码一定要取消 tsconfig.json 中的严格模式 "strict": false ,否则不能赋值
  2. let nulB: boolean = null;
  3. let undefN: number = undefined;
  4. const undefNul: undefined = null;
  5. const nulUndef: null = undefined;

5 void

EcmaScript 中没有 Void 概念,在 EcmaScript 中函数没有返回值时,默认隐式返回 undefined ;而在 TypeScript 中,需要给函数显示声明返回值类型,如果遇到无返回值的函数,需声明返回类型为 **void**

  1. function print(str: string): void {
  2. console.log(str);
  3. }

编译后

  1. function print(str) {
  2. console.log(str);
  3. }

注与 null,undefined 不同, void 不是其他类型的子类,不能赋值给其他类型,它本身也只能被赋值为 null,undefined

  1. const vNul: void = null; // 这句要取消严格模式才能通过
  2. const vUndef: void = undefined;

6 never

还有一种情况 :never 数据类型,常用于修饰函数返回值,表明函数永远不会返回值(不同于 :void 默认返回 undefined ),常见情况有抛出异常,死循环,无类型空数组等。

  1. function error():never {
  2. throw new Error("Somthing wrong");
  3. }
  4. function loop():never {
  5. while(1) {}
  6. }
  7. const emptyArr: [] = [];
  8. console.log(emptyArr.length); // 0
  9. // ERROR: 类型“number”的参数不能赋给类型“never”的参数。
  10. emptyArr.push(1);