如何跟踪函数是否可以抛出 TypeScript?



js-sys公告说:

我们考虑了 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);
}

没有办法描述它。
跟踪它的一种选择可能是使用Result/Either类型,用于更强大的类型语言,如 Rust、Scala、OCaml 和 Haskell。
您可能还对所用内容的运行时成本(newtype 模式(感兴趣。示例实际上使用更深的嵌套和更多的开销,而成本基本上为零。

最新更新