We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
接下来我们将学习TypeScript 中的两个重要主题:枚举(Enums)和泛型(Generics)。这两个特性能大大提高代码的可重用性和安全性。
枚举是 TypeScript 中一种特殊的数据类型,允许我们为一组数值设定友好的名字。枚举的定义使用 enum 关键字。
enum
enum Direction { Up = 1, Down, Left, Right, }
在这个例子中,我们定义了一个名为 Direction 的枚举,它有四个成员:Up、Down、Left 和 Right。Up 的初始值为 1,其余成员的值会自动递增。
Direction
Up
Down
Left
Right
除了使用数值,我们也可以使用字符串:
enum Direction { Up = "UP", Down = "DOWN", Left = "LEFT", Right = "RIGHT", }
此外,TypeScript 还支持计算的和常量成员。常量枚举通过 const enum 进行定义,TypeScript 会在编译阶段进行优化:
const enum
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)是一种强大的类型工具,它允许我们编写可重用、灵活和类型安全的代码。泛型允许我们在定义函数、类或接口时使用类型参数,这些类型参数在使用时可以被动态地指定具体的类型。
以下是泛型在 TypeScript 中的几个常见应用场景:
函数泛型允许我们编写可适用于多种类型的函数,提高代码的重用性和灵活性。例如:
function identity<T>(arg: T): T { return arg; } let result = identity<number>(42); // result的类型为number
在上面的示例中,identity函数接受一个类型参数T,表示输入和输出的类型。通过在函数调用时显式指定类型参数为number,我们可以将42传递给identity函数并推断出结果的类型为number。
identity
T
number
42
接口泛型允许我们创建可适用于不同类型的接口定义。例如:
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。
Pair
U
first
second
string
pair
类泛型允许我们创建可适用于不同类型的类定义。例如:
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方法获取该值。
Container
container
value
getValue
泛型还支持约束(Constraints)的概念,通过使用约束,我们可以限制泛型的类型范围,使其满足特定的条件。
泛型在 TypeScript 中广泛应用于函数、类、接口和类型别名的定义中,它提供了一种灵活、类型安全且可重用的方式来处理不同类型的数据。通过使用泛型,我们可以在编写代码时提供更强大的类型支持,从而减少错误并提高代码的可维护性和可读性。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
枚举和泛型
接下来我们将学习TypeScript 中的两个重要主题:枚举(Enums)和泛型(Generics)。这两个特性能大大提高代码的可重用性和安全性。
枚举
枚举是 TypeScript 中一种特殊的数据类型,允许我们为一组数值设定友好的名字。枚举的定义使用
enum
关键字。在这个例子中,我们定义了一个名为
Direction
的枚举,它有四个成员:Up
、Down
、Left
和Right
。Up
的初始值为 1,其余成员的值会自动递增。除了使用数值,我们也可以使用字符串:
此外,TypeScript 还支持计算的和常量成员。常量枚举通过
const enum
进行定义,TypeScript 会在编译阶段进行优化:异构枚举
TypeScript 支持数字和字符串混用的枚举,这种类型的枚举被称为异构枚举:
尽管 TypeScript 支持这种用法,但我们在实际项目中应尽可能避免使用异构枚举,因为这会引入不必要的复杂性。
枚举成员的类型
在某些特殊的情况下,枚举成员本身也可以作为一种类型:
泛型
在 TypeScript 中,泛型(Generics)是一种强大的类型工具,它允许我们编写可重用、灵活和类型安全的代码。泛型允许我们在定义函数、类或接口时使用类型参数,这些类型参数在使用时可以被动态地指定具体的类型。
以下是泛型在 TypeScript 中的几个常见应用场景:
1. 函数泛型
函数泛型允许我们编写可适用于多种类型的函数,提高代码的重用性和灵活性。例如:
在上面的示例中,
identity
函数接受一个类型参数T
,表示输入和输出的类型。通过在函数调用时显式指定类型参数为number
,我们可以将42
传递给identity
函数并推断出结果的类型为number
。2. 接口泛型
接口泛型允许我们创建可适用于不同类型的接口定义。例如:
在上面的示例中,我们定义了一个
Pair
接口,它接受两个类型参数T
和U
,表示first
和second
属性的类型。通过指定类型参数为number
和string
,我们创建了一个具体的pair
对象,它的first
属性类型为number
,second
属性类型为string
。3. 类泛型
类泛型允许我们创建可适用于不同类型的类定义。例如:
在上面的示例中,我们定义了一个
Container
类,它接受一个类型参数T
,表示类的内部值的类型。通过在创建类的实例时显式指定类型参数为number
,我们创建了一个具体的container
对象,它的value
属性类型为number
,并可以使用getValue
方法获取该值。泛型还支持约束(Constraints)的概念,通过使用约束,我们可以限制泛型的类型范围,使其满足特定的条件。
泛型在 TypeScript 中广泛应用于函数、类、接口和类型别名的定义中,它提供了一种灵活、类型安全且可重用的方式来处理不同类型的数据。通过使用泛型,我们可以在编写代码时提供更强大的类型支持,从而减少错误并提高代码的可维护性和可读性。
The text was updated successfully, but these errors were encountered: