You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript实现栈时使用getter触发类型不兼容错误求助

问题分析与解决

你遇到的错误核心是接口IStack<T>定义的size是一个方法,而父类Store<T>提供的size是一个getter属性,TypeScript判定这两者类型不兼容——方法类型() => number和数值类型number无法匹配。

方案一:修改接口,将size定义为属性

把IStack中的size()方法改为属性定义,和父类的getter属性保持一致:

interface IStack<T> {
  capacity: number;
  push(v: T): void;
  pop(): T | undefined;
  peek(): T | undefined;
  size: number; // 改为属性,而非方法
}

修改后,Stack类继承的size getter就能满足接口要求,错误会直接消失。

方案二:在Stack类中实现size方法

如果不想改动接口,可以在Stack类里补充实现接口要求的size方法,复用父类的getter逻辑:

class Stack<T> extends Store<T> implements IStack<T> {
  constructor(public capacity: number = Infinity) {
    super();
  }

  push(v: T): void {
    if (this.isFull()) {
      throw new Error("Maximum capacity of stack reached.");
    }
    this.storage.push(v);
  }

  pop(): T | undefined {
    return this.storage.pop();
  }

  peek(): T | undefined {
    return this.storage[this.size - 1];
  }

  isFull(): boolean {
    return this.capacity === this.size;
  }

  // 新增size方法,实现接口要求
  size(): number {
    return super.size;
  }
}

这样既满足了接口的方法定义,又不用重复编写长度计算逻辑。

注意:你代码中peek、isFull方法里使用this.size的写法,无论采用哪种方案都不需要修改,因为父类的getter属性仍然可以正常访问。

内容的提问来源于stack exchange,提问作者James Blackwell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:35:17