类型 demo
number 1, -33
string ‘hello’
boolean true, false
字面量 本身
any
unknown
void
never
object {a: ‘heelo’}
array [1, 2, 3]
tuple [4, 5]
**enum** enum(A, B)

1. 字面量

  • 演示

    image.png

  • 使用场景

    • | 或的意思,不光可以用来连接 字面量,也可以用来连接 多个类型(联合类型)

字面量.png

2. any

表示关闭了 ts 对于类型的检测,不建议使用 any

3. unknown

  • unknown 来代替 any 类型。异同点是一个 any 类型可以赋值给任意其他类型(非常不安全),但是 unknown 就不同了,他不可以赋值给其他类型(有校验限制)

    carbon.png

  • any 区别

image.png

  • (本质上)unknown 是一个类型安全any
  • unknown 不能直接赋值给其他变量

    • 如果一定要赋值,则需要一个判断:

      1. if (typeof a === 'string') {
      2. b = a; // 虽然麻烦,但是可以避免出错
      3. }
    • 方法二:类型断言 (告诉解析器解析变量的实际类型) ```typescript // 变量 as 类型 b = a as string;

// <类型>变量 b = a;

  1. <a name="3Ayx8"></a>
  2. # 4. void和never
  3. 大多用于函数返回值,不写返回类型会自动判断为 `any`
  4. <a name="MRdnS"></a>
  5. ## 4.1 void
  6. 没有返回值的函数
  7. <a name="SSxbr"></a>
  8. ## 4.2 never
  9. 永远不会返回结果的函数
  10. ```typescript
  11. function errorResponse(): never {
  12. throw new Error('报错了!');
  13. }

5. object

因为js里万物皆可 object,所以并不推荐使用 object
声明语法:‘{属性名: 属性值类型, 属性名: 属性值类型}’

  1. let test: {name: string, age: number};
  2. test = {name: '高老庄吃瓜群众', age: 18};

5.1 可选属性

为了实现对象中某些属性非必填效果,需要在属性值后面冒号前面添加一个 ‘?’,来表示该属性 可选

  1. let test1: {name: string, age?: number};
  2. test1 = {name: '高老庄自带板凳吃瓜群众'};

5.2 任意属性

语法:‘[属性值key: key类型]: value类型’

  1. // propName 和 xxx 并不是固定死的,可以是任意值
  2. let test2: {name: string, [propName: string]: any};
  3. test2 = {name: '高老庄忘带板凳的吃瓜群众', sex: '男', gender: 1};
  4. let test3: {name: string, [xxx: string]: any};
  5. test3 = {name: '高老庄爬树上的吃瓜群众', sex: '男', gender: 1};

6. Function

也是不推荐直接使用 function,推荐使用下面代码:

  1. let test4: (a: number, b: number) => number;
  2. test4 = function (n1: number, n2: number): number {
  3. return n1 + n2;
  4. }

7. array

  1. let arr: number[];
  2. // OR
  3. let arr1: Array<number>;

8. 元组(tuple)

语法:[类型1, 类型2, 类型3]

  1. let tup: [string, number];
  2. tup = ['hello', 123];

9. 枚举(enum)

  1. enum Gender {
  2. Male = 0,
  3. Female = 1
  4. }
  5. const gender = Gender.Female;

10. & 的作用

  1. let test: {name: string} & {age: number};
  2. test = {name: '高老庄吃瓜群众', age: 18};

11. 类型别名

  1. type myType = string;
  2. let test: myType;