以下代码编译时不会出现错误“声明类型既不是void也不是any的函数必须返回值或包含一个throw语句”。
有没有办法让编译器识别出_notImplemented抛出了异常?
function _notImplemented() {
throw new Error('not implemented');
}
class Foo {
bar() : boolean { _notImplemented(); }
我能看到的唯一的解决办法就是使用泛型。但这似乎有点古怪。有没有更好的方法?
function _notImplemented<T>() : T {
throw new Error('not implemented');
}
class Foo {
bar() : boolean { return _notImplemented(); }
4条答案
按热度按时间nwo49xxi1#
可以使用
Either
而不是throw
。Either
是一种通常保存错误或结果的结构。由于它是一种与其他类型类似的类型,因此TypeScript可以轻松地使用它。示例:
利用函数
sixthCharacter
的函数可以选择将其展开、返回maybe本身、抛出error本身或其他选项。你需要选择一个包含
Either
的库--看看像TsMonad
或monet.js
这样的monad库。z9ju0rcb2#
您可以指定
_notImplemented
返回never
类型。never
是从不返回的函数的特殊类型。这可能是因为无限循环或因为它总是抛出错误。iezvtpos3#
AFAIK目前没有非黑客的方法来处理这个问题。
TypeScript团队目前正在github(https://github.com/Microsoft/TypeScript/issues/1042)上对此进行检查,我们可能很快就会有一些解决方案。
kcugc4gi4#
出于此检查的目的,我们应该在enter image description here中将 throw 视为与 return 等效