【发布时间】:2019-03-03 14:41:04
【问题描述】:
我们考虑过 TypeScript 前端,但没有优先考虑它,因为 TypeScript 没有描述函数是否抛出异常
1) 这是正确的吗? 2)如果不是,有什么方法可以标记函数是否可以在TS中抛出?编译器有什么方法可以提供帮助吗?
这里有两个解决方案。第一个实际上并不检查类型,但它们至少作为与其他程序员交流的一种方式是可见的。第二种方法进行了一些有限的检查,但运行时间成本较低且需要人工操作。
// unchecked solution
type OrThrow<T> = T;
function add(a: number, b: number): OrThrow<number> {
return a + b;
}
// checked solution with run-time cost and manual work
type Exn<T> = T & { __canThrow: true };
function exn<T>(t: T): Exn<T> {
return t as Exn<T>;
}
function sum(a: number, b: number): Exn<number> {
return exn(a + b);
}
【问题讨论】:
-
我相信这与 TypeScript 与 JavaScript 的关系有关......基本上任何代码都可以引发异常,即使它的类型正确。例如,尝试访问未定义属性或变量 (
data.data.data) 上的属性路径。也就是说 any 函数可以引发运行时异常。但是,无法指定可能引发的错误类型。 -
你想要this feature,我想。到那边去???如果您认为自己有一个令人信服的用例尚未讨论,或者发表评论。
-
@ExplosionPills,明白了,这更多是关于通过函数在某些情况下要抛出的类型进行通信。我提供了两个例子来说明如何做到这一点,但都不喜欢。
-
这个问题与受检异常没有直接关系,而是对受检异常的有趣讨论here
标签: typescript exception types