一、Boolean

  1. let isDone: boolean = false;

二、Number

  1. let decLiteral: number = 6;
  2. let hexLiteral: number = 0xf00d;
  3. let binaryLiteral: number = 0b1010;
  4. let octalLiteral: number = 0o744;
  5. let bigLiteral: bigint = 100n; // bigint是大整数的类型:注意:1,仅在值可能大于 2^53 - 1 时使用 BigInt;2,不要在两种类型之间进行相互转换。

三、String

  1. let name: string = "bob";

四、Array

  1. // 两种方式可以定义数组:
  2. let list: number[] = [1, 2, 3];
  3. let list: Array<number> = [1, 2, 3];

五、Tuple(新增)

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。比如,你可以定义一对值分别为 stringnumber 类型的元组。

  1. let x: [string, number];
  2. x = ['hello', 10]; // OK
  3. x = [10, 'hello']; // Error

六、Enum(新增)

enum 类型是从0开始递增+1,除非指定值,且后面的还是按照初始值+1.

  1. enum Color {Red, Green=2, Blue,Yellow=7 ,Dark}
  2. let c1: string = Color[0];
  3. let c: Color = Color.Red;
  4. let d1: string = Color[1];
  5. let d: Color = Color.Green;
  6. let e1: string = Color[2];
  7. let e: Color = Color.Blue;
  8. let f1: string = Color[3];
  9. let f: Color = Color.Yellow;
  10. let g1: string = Color[4];
  11. let g: Color = Color.Dark;
  12. console.log('enum',c1,c,d1,d,e1,e,f1,f,g1,g)
  13. // 输出:'enum',Red 0 undefined 2 Green 3 Blue 7 undefined 8

七、Unknown

描述一个我们还不知道其类型的变量
唯二的顶级类型,另一个顶级类型是any。unknown 和 any 的主要区别是 unknown 类型会更加严格:在对 unknown 类型的值执行大多数操作之前,我们必须进行某种形式的检查。而在对 any 类型的值执行操作之前,我们不必进行任何检查。
参考:https://juejin.cn/post/6844903866073350151

  1. let notSure: unknown = 4;
  2. notSure = "maybe a string instead";
  3. notSure = false; // 可以改变类型

八、Any

  1. let notSure: any = 4;
  2. notSure.ifItExists(); // 可以
  3. notSure.toFixed(); // 可以
  4. let prettySure: unknown = 4;
  5. prettySure.toFixed(); // 不可以,需要判断是否是数字

九、Void

某种程度上来说, void 类型像是与 any 类型相反,它表示没有任何类型

  1. // 1,定义没有返回值的函数
  2. function warnUser(): void {
  3. console.log("This is my warning message");
  4. }
  5. // 2,赋予 null (只在ts配置 --strictNullChecks 未指定时)和 undefined :
  6. let unusable: void = undefined;

十、Null 和 Undefined

默认情况下 null 和 undefined 是所有类型的子类型。然而,当你指定了 —strictNullChecks 标记, null 和 undefined 只能赋值给 any 和它们各自的类型(有一个例外是 undefined 还可以赋值给 void 类型)。
ps):官方鼓励尽可能地使用 —strictNullChecks

  1. let u: undefined = undefined;
  2. let n: null = null;

十一、Never

永不存在的值的类型,一般配合throw new Error使用

  1. // 返回never的函数必须存在无法达到的终点
  2. function error(message: string): never {
  3. throw new Error(message);
  4. }
  5. // 推断的返回值类型为never
  6. function fail() {
  7. return error("Something failed");
  8. }
  9. // 返回never的函数必须存在无法达到的终点
  10. function infiniteLoop(): never {
  11. while (true) {
  12. }
  13. }

十二、Object

object 表示非原始类型,也就是除 number , string , boolean , bigint , symbol , null 或 undefined 之外的类型。

  1. declare function create(o: object | null): void;
  2. create({ prop: 0 }); // OK
  3. create(null); // OK
  4. create(42); // Error
  5. create("string"); // Error
  6. create(false); // Error
  7. create(undefined); // Error

十三、类型断言

类型断言有两种形式。

  1. // 1,其一是 “尖括号” 语法:(JSX无法使用)
  2. let someValue: any = "this is a string";
  3. let strLength: number = (<string>someValue).length;
  4. // 2,另一个为 as 语法:
  5. let someValue: any = "this is a string";
  6. let strLength: number = (someValue as string).length;
  7. // 建议as,兼容性更好

十四、关于 let

es6新关键字,能解决很多问题,尽量使用

十五、关于 Number, String, Boolean, Symbol 和 Object

以上这些类型和我们以上推荐的小写版本的类型是一样的。但这些类型不属于语言的基本类型,并且几乎在任何时候都不应该被用作一个类型

  1. // 错误写法
  2. function reverse(s: String): String {
  3. return s.split("").reverse().join("");
  4. }
  5. reverse("hello world");
  6. // 正确写法
  7. function reverse(s: string): string {
  8. return s.split("").reverse().join("");
  9. }
  10. reverse("hello world");