js 实现nameof
在JavaScript中,nameof操作符(类似C#的功能)可以通过自定义函数模拟,用于获取变量或属性的名称。以下是几种实现方法:
使用对象属性包装
通过将变量包装为对象属性,利用Object.keys提取名称:
function nameof(obj) {
return Object.keys(obj)[0];
}
const myVar = 42;
console.log(nameof({ myVar })); // 输出 "myVar"
通过Proxy捕获属性名
利用Proxy拦截属性访问并记录名称:
const nameofHandler = {
get(target, prop) {
return prop;
}
};
const nameof = new Proxy({}, nameofHandler);
console.log(nameof.myProperty); // 输出 "myProperty"
结合TypeScript类型提示
若使用TypeScript,可添加类型辅助增强开发体验:

function nameof<T>(key: keyof T): keyof T {
return key;
}
interface MyInterface { id: number; }
console.log(nameof<MyInterface>('id')); // 输出 "id"
注意事项
- 原生JavaScript无编译时元数据,无法直接实现C#的
nameof语义。 - 上述方法需手动维护变量与名称的关联,适用于重构友好场景。
- 属性名捕获方案在压缩代码时可能因变量名混淆失效。






