TypeScript使用枚举设置类属性触发TS2349错误求助
TypeScript setter调用报错TS2349:无法调用类型'E_TaskState'的成员
问题原因
你在定义setter时犯了语法错误:TypeScript的setter命名规则是setter的名称对应要暴露的属性名,而你写了set setStatus,这会导致类实例上的setStatus变成一个E_TaskState类型的属性,而非可调用的方法。当你尝试用函数调用语法C_buildFirst.setStatus(...)时,TypeScript会认为你在调用一个枚举值,自然抛出「无法调用类型成员」的错误。
修正后的代码
C_GenericTask.ts
export default class C_GenericTask { protected _status: E_TaskState; constructor(title: string) { this._status = E_TaskState.TODO; } // getter保持不变,对应属性名status public get status(): E_TaskState { return this._status; } // setter名称改为status,和getter对应 public set status(value: E_TaskState) { this._status = value; } }
database.ts
import C_GenericTask from "./classes/C_GenericTask"; import E_TaskState from "./Enum/E_TaskState"; let C_buildFirst = new C_GenericTask("Build First"); // 用赋值语法触发setter,而非函数调用 C_buildFirst.status = E_TaskState.DONE;
额外说明
如果你坚持要保留setStatus作为setter的触发方式(不推荐,不符合TS属性访问的常规风格),也可以修改调用方式为赋值,而非函数调用:
// 对应你原来的set setStatus定义 C_buildFirst.setStatus = E_TaskState.DONE;
但更规范的写法是让getter和setter共享同一个属性名(比如status),通过标准的属性赋值/取值语法来操作,这也是TypeScript设计getter/setter的初衷。
内容的提问来源于stack exchange,提问作者andyberaldcatelo
相关产品推荐
相关产品推荐

