TypeScript

泛型

May 30, 2022
Go, TypeScript
Generic

泛型 # 是什么? # Type parameter, 类型参数。func Add[T Number](x, y T) (r T),其中的T就是类型参数,它被接口Number所约束。 type Number interface { int | float32 } 调用方除了可自行决定参数值之外,还可以自行决定参数类型。Add[int](1, 2),在调用时指定T的类型为int,同时传入参数值1,2必须是int类型。 这样使得代码更灵活,更有扩展性,同时更安全。 Go泛型 # 为什么? # 静态语言,类型固定,比如这个函数:func Add(x, y int) int就要求参数和结果都必须是整型。 那如果后来又需要一个浮点数的加法呢? 那使用interface{}不也可以吗? 试看: // 准确的描述出了参数和返回值的类型,非常方便 func Add(x, y int) int // 但也限制了Add函数的参数类型--只能接收`int` // Add(0.1, 0.2) // can't do that // 那怎么办呢?再写一个针对float64的呗 func AddFloat64(x, y float64) float64 AddFloat64(0.1, 0.2) // it's ok // 如果还要支持其它类型呢?再加一个吗,每多一种类型,就多加一个。。。 func AddInt8(x, y int8) int8 func AddInt32(x, y int32) int32 func AddFloat32(x, y float32) float32 // more. ...