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

如何通过ts-morph判断类成员是getter还是setter?

解决方案

在ts-morph中,你可以直接通过内置的类型守卫方法区分getter和setter,完全不需要解析代码字符串:

  • 用member.isGetAccessor()判断是否为getter
  • 用member.isSetAccessor()判断是否为setter

这两个方法对应ts-morph中的GetAccessorDeclaration和SetAccessorDeclaration类型,专门用于识别类的存取器成员。

修改后的代码示例

建议导入SyntaxKind枚举替代硬编码的数字(比如你之前用的174对应SyntaxKind.MethodDeclaration),让代码更易读:

import { SyntaxKind } from "ts-morph";

// 你的其他逻辑代码...

const classMembers = classObj.getMembers();
classMembers.forEach(member => {
  const name = member.getName();
  const isMethod = member.isKind(SyntaxKind.MethodDeclaration);
  const isGetter = member.isGetAccessor();
  const isSetter = member.isSetAccessor();
  const isStatic = member.isStatic();
  const isAsync = member.isAsync ? member.isAsync() : false;
  const isPrivate = name.startsWith('#');
  console.log({ name, isMethod, isGetter, isSetter, isStatic, isAsync, isPrivate });
});

对应输出结果

运行修改后的代码,针对你提供的示例类,输出会清晰区分getter和setter:

{
  name: '#_val',
  isMethod: false,
  isGetter: false,
  isSetter: false,
  isStatic: false,
  isAsync: false,
  isPrivate: true
}
{
  name: '#money',
  isMethod: false,
  isGetter: false,
  isSetter: false,
  isStatic: false,
  isAsync: false,
  isPrivate: true
}
{
  name: 'bgColor',
  isMethod: false,
  isGetter: false,
  isSetter: false,
  isStatic: false,
  isAsync: false,
  isPrivate: false
}
{
  name: 'tacos',
  isMethod: true,
  isGetter: false,
  isSetter: false,
  isStatic: true,
  isAsync: true,
  isPrivate: false
}
{
  name: 'val',
  isMethod: false,
  isGetter: true,
  isSetter: false,
  isStatic: true,
  isAsync: false,
  isPrivate: false
}
{
  name: 'val',
  isMethod: false,
  isGetter: false,
  isSetter: true,
  isStatic: true,
  isAsync: false,
  isPrivate: false
}
{
  name: 'doSomething',
  isMethod: true,
  isGetter: false,
  isSetter: false,
  isStatic: false,
  isAsync: true,
  isPrivate: false
}
{
  name: '#update',
  isMethod: true,
  isGetter: false,
  isSetter: false,
  isStatic: false,
  isAsync: false,
  isPrivate: true
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:45:19