js 实现nameof
在 JavaScript 中实现类似 C# 的 nameof 功能,可以通过以下方法获取变量或属性的名称字符串。以下是几种常见实现方式:
使用函数包装变量
通过函数将变量名转换为字符串,适用于局部变量:
function nameof(obj) {
return Object.keys(obj)[0];
}
const myVariable = 42;
console.log(nameof({ myVariable })); // 输出 "myVariable"
通过 Proxy 捕获属性名
利用 Proxy 对象拦截属性访问,动态获取属性名:
const nameofHandler = {
get(target, prop) {
return prop;
}
};
const nameof = new Proxy({}, nameofHandler);
console.log(nameof.someProperty); // 输出 "someProperty"
适用于类属性的装饰器方案
使用 TypeScript 装饰器(需开启 experimentalDecorators):
function nameof<T>(key?: keyof T): string {
return key as string;
}
class Example {
propertyName: string;
}
console.log(nameof<Example>('propertyName')); // 输出 "propertyName"
构建时转换方案
通过 Babel 插件或 TypeScript 转换器在编译时静态替换:
// 假设存在编译时转换工具
const name = nameof(myVariable); // 编译后变为 "myVariable"
注意事项
- 纯 JavaScript 无法直接获取局部变量名,需通过对象包装
- 类属性方案在 TypeScript 中更可靠
- 生产环境建议考虑编译时方案避免运行时开销
选择具体方案时应考虑:

- 是否需要支持局部变量
- 是否使用 TypeScript
- 是否允许构建时转换






