当函数包含在 TypeScript 命名空间中时获取函数的名称

问题描述 投票:0回答:1

我希望能够从函数内部获取 TypeScript 函数自己的名称。我已通读 Function: name 文档,但以下代码无法按预期工作。

这是一个简单的测试代码(链接到 TS Playground

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

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

console.log(func()); // Expect output: 'func'
console.log(NS.func()); // Expect output: 'NS.func'

代码的实际输出是

'func'
''

似乎如果函数包含在命名空间中,则 Function.name 属性将设置为空字符串。

有什么聪明的方法可以解决这个问题吗?

javascript typescript function namespaces
1个回答
0
投票

非常感谢您的及时回复。

根据Bergi和Giovanni的反馈,我修改了原始代码以获得部分解决方案。

    const func = () => {
        return func.name;
    }
    
    namespace NS {
        export const func1 = () => {
            return NS.func1.name;
        }
    
        export const func2 = () => {
            return func2.name;
        }
    
        export function func3() {
            return NS.func3.name
        }
    
        export function func4() {
            return func4.name
        }
    }
    console.log(func()); // Expect output: 'func'
    console.log(NS.func1()); // Expect output: 'func1'
    console.log(NS.func2()); // Expect output: 'func2'
    console.log(NS.func3()); // Expect output: 'func3'
    console.log(NS.func4()); // Expect output: 'func4'

现在可以正确返回“func3”和“func4”的名称(尽管仍然无法获取“NS.func3”和“NS.func4”的完全限定名称)。

感谢您的建议。

© www.soinside.com 2019 - 2024. All rights reserved.