问题描述
作者的问题
原始问题:JavaScript - Arrow functionで、あえて引数にundefinedを渡したことを識別する方法はあるのか|teratail
箭头函数写成(param) => { ... }
时,有没有区分“不带参数调用”和“带参数调用undefined
”?
当然不应该写这样的函数,如果真的要,那一定是可行的重写“write with function
and check arguments.length
”或“write argument as args...
并检查args.length
”。
编辑补充
我应该能够使用TypeScript的强大功能,首先做了以下功能:
const foo = (x: undefined) => {
return x
}
foo() // compile error
foo(undefined)
这个函数需要 undefined
但不允许没有参数。然后我尝试在类型级别区分 undefined
和 void
,但失败了。我写的代码:
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 x
是undefined
和void
的和,所以条件表达式总是返回true
.我以某种方式试图将类型信息从类型级别提取到运行时级别,但该方案失败了。
除了作者的问题,我想知道在type-level中是否区分undefined
调用。
问题
-
作者的:如何区分一个函数是否被故意给定为 undefined(无论是 JavaScript 还是 TypeScript,上述除外)
- 我的:在问题中,特别关注 TypeScript 的特性,类型级计算。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)