我遇到了这种(对我来说)奇怪的行为,我不知道是否有充分的理由这样做,因为它对我来说没有意义.
在打印脚本中,如果我执行以下操作,它可以正常工作
type UndefinedFunction = () => undefined;
let uf: UndefinedFunction = function() {
return; // no errors,
}
这对我来说是有意义的,就像在Java脚本中一样,当一个函数在没有值的情况下执行return;
时,那么返回的值是undefined
.
但如果我执行以下操作
type MaybeUndefinedFunction = () => string | undefined;
let muf: MaybeUndefinedFunction = function() {
return; // error
}
然后我得到错误Type '() => void' is not assignable to type 'maybeUndefinedFunction'. Type 'void' is not assignable to type 'string | undefined'
这对我来说没有任何意义.我读了here本关于"空"与"未定义"的书,但它说"空"是一种表明答案不会被观察到的方式.但是,为什么现在return;
被标识为void
而不是undefined
,如果在预览示例中它运行得很好呢?
如果我做return undefined;
,错误就会消失,但我想知道,如果return;
和return undefined;
产生相同的结果,为什么这是必要的.
顺便说一句,如果我根本不返回任何东西,也会发生同样的情况;在第一个事件上有效,但在第二个事件上不起作用,尽管这两个事件都应该符合undefined
的返回值.
这里是一个playground ,让您看到实际操作中的错误:https://www.typescriptlang.org/play?#code/FAFwngDgpgBAqgOwCZQGYEsFSQMQK4IDGI6A9gjALwwAUAlFQHwwEoZZIDcwoksAsgEMwAIyiI2mbPiIlyVWg0rMAziABOmAOYwAPi2RopXHgBsoIFqgBc8Q+2kFiZCtVRO5CejADewGAEw6hZ46gjcAL5mFjAAtng2MEKi4vbGMs7ybh4u3n6BQSFhkTxAA