我认为typescript有很多不明显的地方,使得它不严格也不正确。
我想使用 undefined 作为函数返回类型。因为实际上它是未定义的,不是 void 或其他虚构类型。但是当我写下这个:
function myFunction(): undefined {
}
它说“声明类型既不是‘void’也不是‘any’的函数必须返回一个值”。
一定不能。而这一点大家都可以验证。我不想同意“无效更好,我们决定承诺等于未定义”等等。并且不想写return undefined
,如果它是明显且多余的。
如何让它在这个例子中工作?可能存在一些标志或一些“奇迹评论指令”?
这是用例,解释了为什么我想要显式未定义:
正确的示例和解决方案 https://www.typescriptlang.org/play?#code/FDBmFcDsGMBcEsD2kAEBnRBbApgQTQJ4wBiUcSkAFAJQBcKACgE5bxrYA8AbovACYA%20FAG9gASCbZY4JqkjYA7oxaY22SjXo9%20KALxDRYse1gAVeDkThYG6vsNHYACxZKAokxZNKAcgAyiIgA1igAhrAo0MgYADbYAHQouDExKAAOLNDYaGgobCiw2EyqkOHYfCgAtChkoeAA5k4R2AAeWWkIyPE%201ADc4mIAvgA0KACMAAxTKH3ig7ODIAD0SygA4oEVMfAARkyhTARgZJ2oGDh%20u-uHAMqhBGgAkrAASlIykGgAarx8lCgQSD0Gj6FDaCp0MG-ETiSTSWQAqA0fqLY4wU4oTAEUjoiiaGqQPjYUDweQVYQoFYoDiVWkoAByiCUjzCmHQMmwo2c4TyEXyrVCcBiBAJRJJZMSAHVHvSUJQxtQUABCFWq1XiKkACSK2BQLOcpJC3OaXCKBANkHqeVyAHkANKjJw6vUoOEfKH8WHvBHg9BYbCXPYHAh3B7PN7wz4-fj-c54QgkE4UGa9SmrGl0xnMlAKeApHNMeCFSKITzYOCu72QKUyuUAJkVaqbwFRVIAwshYPsK9gAI7gUKpWCITHYpPINHkZBhSCIZxFACyY9xyElRacpidaDuOA7kC7gpskKgYtJ5RhYipjMrkcSbhah9FxLPfHiLeWq21khd0FCkB8ERRPuLBDgQaTZKMRbWigs4RFiJZEjOFQsnwyAASgQSzkoChODy%20Skmg-DYJOGJxoG1wEP8Bz1MCdhCL6kKQOAmA7EUF7wKA-ywGB2CIKAYRMPUNB6LougoD4iA7AAVuWsA%20DMDhugi9KhPSqZUjc4HQPAg6YqE9TwNAIRQJhTKoL%207BzCAEhVuMdYAMwoiAcQRH%20BA2qApgKIgOJTp8Lx-qhmC0aCJ7PmSegznOTpMEuvmnGuzibtkO7YHuB5wP0wAuSgLT0ExLFsWJZFXMGVGQO5nnefFFBoAFhJYCmabUrS1S0MAV5Mi6oRsmgHJcrhEQGrk2xBocOZ5qk9RSE%204rnqEoCFEwAn1Mx2D7pEg4xMMHWrCy0BOkZBROPkyC6ggOBIRN%20byKay3Ta5qBsH1uqksduoQPCCS7Sg0qypQ9mNk26rAEBsQJDEiBCS0swgHDQA
您希望编译器接受其返回类型注释包括的函数undefined
可以隐式返回undefined
当代码路径没有明确的return
陈述。这是一个合理的愿望,但正如您所注意到的,从 TypeScript 4.1 开始,该语言目前不具备此功能。有一个开放的功能请求,位于微软/TypeScript#36288 https://github.com/microsoft/TypeScript/issues/36288.如果您想增加发生这种情况的机会,您可能需要去那里给它一个????,甚至可能描述为什么您的用例需要这个或者为什么您的代码会从中受益。
但实际上,除非你能让大量其他人大声疾呼这个问题,否则看起来没有任何语言维护者认为它是一个高优先级。
您可能不喜欢这些解决方法,但无论如何它们都在这里。首先,明确包含一个return
声明(有或没有undefined
):
function myFunctionReturn(): undefined {
return; // okay
}
其次,使用错误抑制注释之一,例如//@ts-ignore https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-6.html#suppress-errors-in-ts-files-using--ts-ignore-comments or //@ts-expect-error https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-9.html#-ts-expect-error-comments:
//@ts-ignore
function myFunctionIgnore(): undefined {
}
可能还有其他方法来处理它,但没有最小可重复示例 https://stackoverflow.com/help/minimal-reproducible-example您的用例consume or use such undefined
-返回函数,很难知道如何将其与void
-返回您反对的函数。
Playground 代码链接 https://www.typescriptlang.org/play?target=7#code/GYVwdgxgLglg9mABAWwJ4DFzXmASgUyhACcwAKASgC5FwATfYGMfOxAbwFgAoRPxYoRJgA3IgD04xHADWAQ1Q8Avjx6SAAlADOAWhgBzMHEE9QkWAhQYsFsAElDx-JRr1GzVh1XclQA
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)