
🎬 岸边的风:个人主页
🔥 个人专栏 :《 VUE 》 《 javaScript 》
⛺️ 生活的理想,就是为了理想的生活 !

目录
枚举
异构枚举
枚举成员的类型
泛型
1. 函数泛型
2. 接口泛型
3. 类泛型
接下来我们将学习TypeScript 中的两个重要主题:枚举(Enums)和泛型(Generics)。这两个特性能大大提高代码的可重用性和安全性。
枚举
枚举是 TypeScript 中一种特殊的数据类型,允许我们为一组数值设定友好的名字。枚举的定义使用 enum 关键字。
enum Direction {
    Up = 1,
    Down,
    Left,
    Right,
}
在这个例子中,我们定义了一个名为 Direction 的枚举,它有四个成员:Up、Down、Left 和 Right。Up 的初始值为 1,其余成员的值会自动递增。
除了使用数值,我们也可以使用字符串:
enum Direction {
    Up = "UP",
    Down = "DOWN",
    Left = "LEFT",
    Right = "RIGHT",
}
此外,TypeScript 还支持计算的和常量成员。常量枚举通过 const enum 进行定义,TypeScript 会在编译阶段进行优化:
const enum Enum {
    A = 1,
    B = A * 2
}
异构枚举
TypeScript 支持数字和字符串混用的枚举,这种类型的枚举被称为异构枚举:
enum BooleanLikeHeterogeneousEnum {
    No = 0,
    Yes = "YES",
}
尽管 TypeScript 支持这种用法,但我们在实际项目中应尽可能避免使用异构枚举,因为这会引入不必要的复杂性。
枚举成员的类型
在某些特殊的情况下,枚举成员本身也可以作为一种类型:
enum ShapeKind {
    Circle,
    Square,
}
interface Circle {
    kind: ShapeKind.Circle;
    radius: number;
}
interface Square {
    kind: ShapeKind.Square;
    sideLength: number;
}
泛型
在 TypeScript 中,泛型(Generics)是一种强大的类型工具,它允许我们编写可重用、灵活和类型安全的代码。泛型允许我们在定义函数、类或接口时使用类型参数,这些类型参数在使用时可以被动态地指定具体的类型。
1. 函数泛型
函数泛型允许我们编写可适用于多种类型的函数,提高代码的重用性和灵活性。例如:
function identity<T>(arg: T): T {
  return arg;
}
let result = identity<number>(42);  // result的类型为number
在上面的示例中,identity函数接受一个类型参数T,表示输入和输出的类型。通过在函数调用时显式指定类型参数为number,我们可以将42传递给identity函数并推断出结果的类型为number。
2. 接口泛型
接口泛型允许我们创建可适用于不同类型的接口定义。例如:
interface Pair<T, U> {
  first: T;
  second: U;
}
let pair: Pair<number, string> = { first: 42, second: "hello" };
在上面的示例中,我们定义了一个Pair接口,它接受两个类型参数T和U,表示first和second属性的类型。通过指定类型参数为number和string,我们创建了一个具体的pair对象,它的first属性类型为number,second属性类型为string。
3. 类泛型
类泛型允许我们创建可适用于不同类型的类定义。例如:
class Container<T> {
  private value: T;
  constructor(value: T) {
    this.value = value;
  }
  getValue(): T {
    return this.value;
  }
}
let container = new Container<number>(42);
let value = container.getValue();  // value的类型为number
在上面的示例中,我们定义了一个
Container类,它接受一个类型参数T,表示类的内部值的类型。通过在创建类的实例时显式指定类型参数为number,我们创建了一个具体的container对象,它的value属性类型为number,并可以使用getValue方法获取该值。泛型还支持约束(Constraints)的概念,通过使用约束,我们可以限制泛型的类型范围,使其满足特定的条件。
泛型在 TypeScript 中广泛应用于函数、类、接口和类型别名的定义中,它提供了一种灵活、类型安全且可重用的方式来处理不同类型的数据。通过使用泛型,我们可以在编写代码时提供更强大的类型支持,从而减少错误并提高代码的可维护性和可读性。
 
 














![深度学习-全连接神经网络-训练过程-权值初始化- [北邮鲁鹏]](https://img-blog.csdnimg.cn/7c03d5ccd7b949858a9723f7de70d60e.png)




