如何解决如何区分是否故意给定未定义的函数 作者的问题编辑补充问题
作者的问题
原始问题: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 举报,一经查实,本站将立刻删除。