微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何区分是否故意给定未定义的函数 作者的问题编辑补充问题

如何解决如何区分是否故意给定未定义的函数 作者的问题编辑补充问题

作者的问题

原始问题:JavaScript - Arrow functionで、あえて引数にundefinedを渡したことを識別する方法はあるのか|teratail

箭头函数写成(param) => { ... }时,有没有区分“不带参数调用”和“带参数调用undefined”?

当然不应该写这样的函数,如果真的要,那一定是可行的重写“write with function and check arguments.length”或“write argument as args...并检查args.length”。

我(作者)认为以下方法效果不佳:

  • arguments.length - 不能在箭头函数中取出 arguments
  • 设置认参数 - 敢于传递 undefined,但应用认参数

编辑补充

我应该能够使用TypeScript的强大功能,首先做了以下功能

const foo = (x: undefined) => {
  return x
}

foo() // compile error
foo(undefined)

这个函数需要 undefined 但不允许没有参数。然后我尝试在类型级别区分 undefinedvoid,但失败了。我写的代码


const foo = (x: undefined | void,c: typeof x extends undefined ? 't' | 'a' : 'f' | 'a' = 'a')   => {
  const cond: typeof c extends 't' | 'a' ? number : string
  if(typeof cond === 'number'){
    return 1
  } else {
    return 2
  }
}

console.log(foo());
console.log(foo(undefined));

失败的原因是,仔细想想,很明显,typeof xundefinedvoid的和,所以条件表达式总是返回true .我以某种方式试图将类型信息从类型级别提取到运行时级别,但该方案失败了。

除了作者的问题,我想知道在type-level中是否区分undefined调用

问题

  • 作者的:如何区分一个函数是否被故意给定为 undefined(无论是 JavaScript 还是 TypeScript,上述除外)
    • 我的:在问题中,特别关注 TypeScript 的特性,类型级计算。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。