有没有办法知道函数的返回值类型而不执行它?

mur*_*zel 2 javascript

我在对象中有一系列函数.一个返回一个对象,另一个返回一个字符串:

{
  id: 'test-1',
  children: [
    function childOne() {
      return {
        id: 'child-1'
      }
    },
    function childTwo() {
      return 'text.'
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在不执行函数的情况下检测返回值的类型?

T.J*_*der 9

不是在JavaScript中,不,因为:

  • 声明返回类型不是JavaScript概念.
  • 即使你使用解析器来解析函数的源代码,函数也可以根据它们的输入,它们关闭的状态,你看起来的时间,甚至随机来返回不同的类型.

TypeScript为JavaScript添加了一层静态类型检查,如果这是您经常发现需要的东西.但即使这样,该信息也会在运行时被删除,因此如果您在运行时需要这些信息,TypeScript将无济于事.

相反,您需要将其作为信息包含在数组中,例如:

{
  id: 'test-1',
  children: [
    {
      returns: "object",
      fn: function childOne() {
        return {
          id: 'child-1'
        };
      }
    },
    {
      returns: "string",
      fn: function childTwo() {
        return 'text.';
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

或者,因为函数是对象:

{
  id: 'test-1',
  children: [
    addReturns("object", function childOne() {
      return {
        id: 'child-1'
      }
    }),
    addReturns("string", function childTwo() {
      return 'text.'
    })
  ]
}
Run Code Online (Sandbox Code Playgroud)

......在哪里addReturns:

function addReturns(type, fn) {
  fn.returns = type;
  return fn;
}
Run Code Online (Sandbox Code Playgroud)