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

问题描述

作者的问题

原始问题: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 (将#修改为@)