如何通过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
相关产品推荐
相关产品推荐

