类中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
相关产品推荐
相关产品推荐

