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

如何获取TypeScript命名空间内函数的自身名称?

解决TypeScript命名空间内函数获取自身名称的问题

你遇到的核心问题有两个:一是命名空间内的箭头函数无法正确获取name属性(返回空字符串),二是无法自动得到包含命名空间的完整函数名(比如NS.func)。以下是几种实用的解决办法:

1. 用具名函数表达式替代箭头函数

箭头函数的name属性依赖于赋值目标的变量名,但直接赋值给命名空间对象的属性时,无法正确推导名称。改用具名函数表达式可以让函数拥有明确的name,再手动拼接命名空间名称即可:

const func = () => {
    return func.name;
}

namespace NS {
    // 具名函数表达式,函数自身有明确的name值
    export const func = function func() {
        return `NS.${func.name}`;
    }
}

console.log(func()); // 'func'
console.log(NS.func()); // 'NS.func'

2. 使用函数声明定义命名空间内的函数

在命名空间内直接用函数声明,函数的name属性会自动被设置为函数名,同样手动拼接命名空间名称:

const func = () => {
    return func.name;
}

namespace NS {
    export function func() {
        return `NS.${func.name}`;
    }
}

console.log(func()); // 'func'
console.log(NS.func()); // 'NS.func'

3. 避免硬编码命名空间名称(可选优化)

如果不想在代码里硬写命名空间的名字,可以提前将命名空间名称存储起来,再关联到命名空间对象:

const func = () => {
    return func.name;
}

const nsName = "NS";
namespace NS {
    export const func = function func() {
        return `${nsName}.${func.name}`;
    }
}
// 可选:给命名空间对象添加name属性,方便后续复用
(NS as Record<string, any>).name = nsName;

console.log(func()); // 'func'
console.log(NS.func()); // 'NS.func'

补充说明

  • 箭头函数本身没有name属性的自动推导能力,只有当它赋值给一个变量时,才会从变量名获取name;但赋值给对象属性时,这个推导规则不生效,所以会返回空字符串。
  • 运行时无法自动获取TypeScript命名空间的原始名称,因为编译后它只是一个普通的JavaScript对象,没有内置的名称标识,所以完整的限定名里的命名空间部分只能手动指定或提前存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:43:09