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

类中Get/Set函数调用报错‘不是函数’,求解决方案

问题原因与解决建议

这个错误的核心是你把属性的setter当成方法来调用了——TypeScript里的getter/setter是用来模拟普通属性访问的,不是函数调用语法。

为什么会报错?

你定义的SomeProp是一个带getter和setter的属性,当你执行obj.SomeProp([1,2,3,4])时,JavaScript引擎会先调用SomeProp的getter,返回_someProp的当前值(也就是初始的空数组[]),然后试图把这个数组当作函数来执行,而数组显然不是函数,所以就抛出了obj.SomeProp is not a function的错误。

正确的用法

要给setter赋值,你需要用属性赋值语法,而不是函数调用:

let obj = new Item();
obj.SomeProp = [1, 2, 3, 4]; // 这才是调用setter的正确方式

如果你想验证是否生效,可以紧接着调用getter查看值:

console.log(obj.SomeProp); // 会输出 [1,2,3,4]

优化建议(可选)

你的代码里用了any类型,这违背了TypeScript的类型安全初衷。可以把类型改成更具体的数组类型,比如number[],还能在setter里加验证逻辑:

export class Item {
  private _someProp: number[];
  constructor() {
    this._someProp = [];
  }
  get SomeProp(): number[] {
    return this._someProp;
  }
  set SomeProp(value: number[]) {
    // 可选:验证传入的值是否符合要求
    if (!Array.isArray(value)) {
      throw new Error('SomeProp must be an array of numbers');
    }
    this._someProp = value;
  }
}

这样不仅更规范,还能提前发现类型错误,避免后续bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:32:12