js 实现nameof
在 JavaScript 中,没有内置的 nameof 类似 C# 的功能,但可以通过一些方法模拟类似效果。以下是几种实现方式:
使用函数包装
通过函数包装变量或属性名,返回其字符串形式:
function nameof(obj, prop) {
return prop;
}
const user = { name: 'John' };
console.log(nameof(user, 'name')); // 输出 "name"
利用 Proxy 捕获属性访问
通过 Proxy 拦截属性访问,动态获取属性名:
function nameof(target) {
return new Proxy({}, {
get(_, prop) {
return prop;
}
});
}
const obj = nameof();
console.log(obj.name); // 输出 "name"
通过解构赋值提取属性名
利用对象解构提取属性名,但需预先定义对象:
const user = { name: 'John' };
const { name: nameProp } = user;
console.log(nameProp); // 输出 "John", 但无法直接获取 "name"
使用 TypeScript 的 keyof
如果使用 TypeScript,可以通过 keyof 实现类型安全的属性名提取:

function nameof<T>(key: keyof T): keyof T {
return key;
}
interface User {
name: string;
}
console.log(nameof<User>('name')); // 输出 "name"
注意事项
- 纯 JavaScript 无法直接获取变量名(如
nameof(myVar)),因为变量名在运行时不可见。 - 上述方法主要用于对象属性名的安全引用,避免硬编码字符串。
选择方法时需根据实际场景(如是否用 TypeScript、是否需要类型安全等)权衡。






