Javascript 有没有办法了解函数';s返回值的类型而不执行它?

Javascript 有没有办法了解函数';s返回值的类型而不执行它?,javascript,Javascript,我在一个对象中有一个函数数组。一个返回对象,另一个返回字符串: { id: 'test-1', children: [ function childOne() { return { id: 'child-1' } }, function childTwo() { return 'text.' } ] } 有没有一种方法可以在不执行函数的情况下检测返回值的类型?不在JavaScript中,没有,因为:

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

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

有没有一种方法可以在不执行函数的情况下检测返回值的类型?

不在JavaScript中,没有,因为:

  • 声明返回类型不是JavaScript概念
  • 即使您使用解析器解析函数的源代码,函数也可以根据其输入、关闭状态、查看时间甚至随机返回不同的类型
在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;
}

将每个函数推入数组时,您知道其返回类型吗?不知道,这主要是因为根据应用程序的代码,函数可能在不同的情况下返回不同的数据类型。@jagjeethingh使用typeof()将需要执行该函数(因为它依赖于读取函数返回的变量),但OP提到他们希望在不执行函数的情况下检测它。您可以解析函数的文本并检查
返回
@CertainPerformance之后的所有内容。如果这只是一个变量名,您如何知道它的类型?我不能使用或我不想使用解析器,因为这是一个运行时代码。包括到目前为止,作为属性或参数的信息是我看到的最好的选择。@muratgozel-是的,同样地,解析器也只能提供到目前为止的信息。例如:
function foo(){return someVariableFooClosesOver;}
--它返回什么类型?你必须知道
someVariableFooClosesOver
foo
关闭的任何上下文中是什么。事实上,它甚至可以根据你查看的时间而变化(如果
someVariableFooClosesOver
一次是1,但另一次是
“blah”
)。(和
foo
可以在不同的路径上做不同的事情。)