泛型

泛型

function echo<T>(a: T): T | undefined {
  return a
}
const result = echo<number>(123)

function swap<T, U>(arr: [T, U]): [U, T] {
  return [arr[1], arr[0]]
}
const result2 = swap<string, number>(['123', 345])
console.log(result2)

interface KeyPair<T, U> {
  key: T,
  value: U
}
let kp: KeyPair<number, string> = { key: 1, value: "string" }
let arr2: Array<number> = [1, 2, 3]

约束泛型

// 这种解决方式并不好,因为不仅仅只有数组才有length,字符串也有length
function echoWithArr<T>(arg: T[]): T[] {
  console.log(arg.length)
  return arg
}
// echoWithArr('123')

// 定义一个接口
interface IWithLength {
  length: number
}

// 告诉这个泛型,它必须有一个length,即继承这个接口
function echoWithLength<T extends IWithLength>(arg: T): T {
  console.log(arg.length)
  return arg
}
echoWithLength<string>('123')
echoWithLength<(string | number)[]>([0, '123'])
echoWithLength({ length: 10 })
posted @ 2022-05-19 17:44  见信  阅读(26)  评论(0)    收藏  举报