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

时间:2018-06-13 09:08:14

标签: javascript

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

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

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

1 个答案:

答案 0 :(得分: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.';
      }
    }
  ]
}

或者,因为函数是对象:

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

...其中addReturns是:

function addReturns(type, fn) {
  fn.returns = type;
  return fn;
}