TypeScript使用泛型实现栈结构的封装和类型校验

86 阅读1分钟

TypeScript使用泛型实现栈结构的封装和类型校验

栈结构的封装

export default class Stack<T = unknown> {

  private items: Array<T>

  constructor() {
    this.items = []
  }

  //入栈
  push( element: T ): void {
    this.items.push( element )
  }

  //出栈
  pop(): T | undefined {
    return this.items.pop()
  }

  //返回栈顶元素
  peek(): T | undefined {
    return this.items[this.items.length - 1]
  }

  //返回栈长度
  size(): number {
    return this.items.length
  }

  //判断栈空
  isEmpty(): boolean {
    return this.items.length === 0
  }

  clear(): void {
    this.items = []
  }
}

栈结构的使用

//10进制数转任意进制数
import { Stack } from './stack'

function convert( decNumber: number, base: number ): string {
  const stack = new Stack<number>()
  let str = ''
  const char = '0123456789ABCDEF'
  while ( decNumber > 0 ) {
    stack.push( decNumber % base )
    decNumber = Math.floor( decNumber / base )
  }
  let i = 1
  while ( !stack.isEmpty() ) {
    let index: number | undefined = stack.pop()
    if ( typeof index === 'number' )
      str += char[index]
  }
  return str
}

console.log( convert( 542, 16 ) )		//21E