声明一个方法在打字稿中抛出错误?

时间:2015-12-23 16:17:07

标签: typescript1.7

以下版本不会编译错误“声明类型既不是void也不必返回值或由单个throw语句组成的函数”。

有没有办法让编译器识别出_notImplemented会抛出异常?

function _notImplemented() {
   throw new Error('not implemented');
}

class Foo {
    bar() : boolean { _notImplemented(); }

我唯一能看到的就是使用泛型。但它看起来有点像hacky。还有更好的方法吗?

function _notImplemented<T>() : T {
   throw new Error('not implemented');
}

class Foo {
    bar() : boolean { return _notImplemented(); }

3 个答案:

答案 0 :(得分:5)

你可以使用Either而不是throw。

Aither是一种通常包含错误或结果的结构。因为它是一个类似于其他类型的类型,所以TypeScript可以轻松地使用它。

例如:

function sixthCharacter(a: string): Either<Error, string> {
    if (a.length >= 6) {
        return Either.right<Error, string>(a[5]);
    }
    else {
        return Either.left<Error, string>(new Error("a is to short"));
    }
}

使用函数sixthCharacter的函数可以选择打开它,返回一个可能本身,自己抛出错误或其他选项。

你需要选择一个包含Either的库 - 看一下像TsMonad或monet.js这样的monad库。

答案 1 :(得分:1)

AFAIK目前还没有非hacky方式如何处理这个问题。

目前正由github上的TypeScript团队(https://github.com/Microsoft/TypeScript/issues/1042)对此进行检查,我们很快就会有一些解决方案。

答案 2 :(得分:0)

您可以指定_notImplemented返回类型never

never是永不返回的函数的特殊类型。可能是因为死循环或总是抛出错误。

function _notImplemented() : never {
     throw new Error("not Implemented")
}