一、类型

1、数据类型

  1. 1、原始数据类型
  2. boolean 布尔值
  3. number 数值
  4. string 字符串
  5. Void 空值 (一般用于没有任何返回值的函数)
  6. Null Undefined (与Void区别是,他们是所有类型的子集)
  7. 2、其他数据类型
  8. 1)任意类型
  9. any 任意值
  10. 2)数组类型
  11. 类型 + 方括号表示
  12. let fibonacci: number[] = [1, 1, 2, 3, 5];
  13. 数组泛型
  14. let fibonacci: Array<number> = [1, 1, 2, 3, 5];
  15. 接口表示数组
  16. interface NumberArray {
  17. [index: number]: number;
  18. }
  19. let fibonacci: NumberArray = [1, 1, 2, 3, 5];
  20. 3)函数类型
  21. 函数声明
  22. function sum(x: number = 1, y?: number, ...items: any[]): number {
  23. //x设置了参数默认值。y为可选参数,可选参数必须在必须参数后面。items为剩余参数
  24. return x + y;
  25. }
  26. 函数表达式
  27. let mySum: (x: number, y: number) => number = function (x: number, y: number): number {
  28. return x + y;
  29. };
  30. 重载
  31. 重载允许一个函数接受不同数量或类型的参数时,作出不同的处理。
  32. function reverse(x: number): number;
  33. function reverse(x: string): string;
  34. function reverse(x: number | string): number | string {
  35. if (typeof x === 'number') {
  36. return Number(x.toString().split('').reverse().join(''));
  37. } else if (typeof x === 'string') {
  38. return x.split('').reverse().join('');
  39. }
  40. }
  41. 4)内置对象
  42. let b: Boolean = new Boolean(1);
  43. let e: Error = new Error('Error occurred');
  44. let d: Date = new Date();
  45. let r: RegExp = /[a-z]/;

2、类型推论

不加类型时会发生类型推论,默认为定义时被赋值的类型,如果定义时不赋值,默认为any

3、类型联合

联合类型使用 | 分隔每个类型,如下:

  1. let myFavoriteNumber: string | number;

类型联合只能访问此联合类型的所有类型里共有的属性或方法

4、接口(interfaces)

普通使用

  1. interface Person {
  2. readonly id: number; //只读属性,首次定义后不可改变
  3. name: string; //必选属性
  4. age?: number; //可选属性
  5. [propName: string]: string | number; //任意属性,可写0到多个,只能定义一次。 一旦定义了任意属性,必选属性和可选属性的类型都必须是它的类型的子集
  6. }
  7. let tom: Person = {
  8. id:'8876',
  9. name: 'Tom',
  10. work: 'Web',
  11. address: 'Beijing'
  12. };
  13. tom.id = 1122 //报错,因为id为readonly

数组中的对象使用接口

  1. interface IPerson {
  2. id?: string; // ID is optional (use of ? operator)
  3. name: string; // Name is Required
  4. age: number;
  5. }
  6. const persons: Array<IPerson> = [
  7. { name: "John", age: 12 },
  8. { name: "Ben", age: 20 }
  9. ];

5、类型断言

类型断言(Type Assertion)可以用来手动指定一个值的类型。

作用:

将一个联合类型断言为其中一个类型

将一个父类断言为更加具体的子类

将任何一个类型断言为 any

any 断言为一个具体的类型

值 as 类型

  1. let someValue: any = "this is a string";
  2. let strLength: number = (someValue as string).length;

<类型>值

  1. let someValue: any = "this is a string";
  2. let strLength: number = (<string>someValue).length;

6、声明文件

当使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全、接口提示等功能。

  1. declare var jQuery: (selector: string) => any; //定义了全局变量 `jQuery` 的类型,仅仅用于编译时的检查,在编译结果中会被删除。

7、类型别名

  1. type Name = string;

二、修饰符

  • public (默认) 修饰的属性或方法是公有的,可以在任何地方被访问到,默认所有的属性和方法都是 public 的
  • private 修饰的属性或方法是私有的,不能在声明它的类的外部访问
  • protected 修饰的属性或方法是受保护的,它和 private 类似,区别是它在子类中也是允许被访问的

三、技巧

1、忽略下一行@ts-ignore

  1. //例如 vue 中使用 getCurrentInstance
  2. import { getCurrentInstance } from 'vue'
  3. // @ts-ignore
  4. const { proxy } = getCurrentInstance();