TypeScript入门 | 青训营笔记

111 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第9天,整理一下之前课上关于 TypeScript 的相关内容。

一、本节课主要内容

  1. 数据类型,包含基础数据类型、对象类型、函数类型、泛型等
  2. 高级数据类型,包含联合类型、工具类型等

二、详细知识点介绍

1. 数据类型

  • 基础数据类型:stringnumberbooleannullundefined
  • 对象类型
interface Person {
    name: string
    sex: "male" | "female"
    age: number
}
  • 函数类型:(x: number, y: number) => number

若在接口中定义函数类型,则为(x: number, y: number): number

  • 数组类型:
    • number[]Array<string | number>
    • 元组表示:[number, string, string, number]
    • 接口表示:[key: number]: any(属性名为数字的对象即可以看作是数组)
  • 补充类型
    • 空类型:void
    • 任意类型:any
    • 枚举类型:enum
  • 泛型
    • 泛型约束:<T extends string>
    • 泛型参数默认类型:<T = number>(不显式指定类型时为number
  • 类型别名:type MyType = string | number
  • 类型断言:a as number
  • 字面量:type Tag = "div" | "span"(只允许指定字符串/数字作为固定值)

2. 高级类型

  • 联合/交叉类型:type UnionType = Type1 & Type2UnionType中包含了Type1Type2中所有类型的特性)
  • 类型保护与类型守卫
    • 函数的返回值为一个类型谓词,如arg is A,可以在子作用域中明确arg的类型为A
    • typeofinstanceof可以用来判断数据类型
  • 工具类型:
    • Partical<Type>:将Type中的所有属性设置为可选,可以理解为该类型是Type类型的子集
    • Required<Type>:与Partical相反,将所有属性设置为必选
    • Readonly<Type>:将所有属性设置为readonly
    • Record<KeyType, ValueType>:将KeyType映射ValueType上,构造出由一个键值对组成的类型
    • Pick<Type, Keys>:从Type中挑选部分属性Keys来构造出一个新的类型(具体看后面的例子)
    • Omit<Type, Keys>:与Pick相反,去除Keys指定的属性后构造出一个新的类型
    • Extract<Type1, Type2>:从类型Type1中提取出所有可以赋值给Type2的类型后构造出一个新的类型
    • Exclude<Type1, Type2>:与Extract相反
    • Parameters<Type>:使用函数类型Type参数的类型构造出一个元组类型
    • ReturnType<Type>:函数类型Type返回值的类型
    • InstanceType<Type>:构造函数类型Type实例类型
interface Person {
    name: string
    sex: "male" | "female"
    age: number
    id: string
}

type Student = Pick<Person, "name" | "sex" | "age">

const student = {
    name: "vii",
    sex: "male",
    age: 20,
}
  • 索引类型
    • type Keys = keyof { a: string; b: number }type Keys = "a" | "b"
    • in关键字:表示取值可能是字面量的其中一种可能

三、个人课后总结

这节课老师主要讲解的是 TypeScript 中的数据类型。相较于 JS 的动态类型,TS 的静态类型提供了很好的类型检查,在很大程度上能避免数据类型带来的程序错误。然而 TS 中的数据类型也是十分复杂的,如工具类型就提供了许多种根据已有类型构造出一个新的类型的方法。想要深入掌握 TS ,对于数据类型的理解是十分重要且必要的,这一部分需要花大量的时间进行实践。

四、引用参考

TS 实用工具类型_法研鲁迅的博客-CSDN博客_ts工具类型