小编utp*_*mas的帖子

你能在 TypeScript 中指定条件返回值类型吗?

我编写了以下函数来帮助处理错误

const capture = <T>(
  callback: () => T
): { result?: T; error?: Error } => {
  try {
    return { result: callback(), error: undefined };
  } catch (err) {
    return { result: undefined, error: err as Error };
  }
};
Run Code Online (Sandbox Code Playgroud)

用法示例:

const { result, error } = capture<number>(() => foo());
if (error) badPath();

console.log("hooray we got a result", result)
Run Code Online (Sandbox Code Playgroud)

然而 TypeScript 编译器会抱怨:

Object is possibly 'undefined'. ts(2532)
const result: number | undefined
Run Code Online (Sandbox Code Playgroud)

我理解为什么编译器会抱怨(这是使用可选参数的预期行为)。

然而我想知道是否存在一些可以支持条件返回类型的 TypeScript 恶作剧。

即我们有没有办法指定capture …

typescript

5
推荐指数
2
解决办法
130
查看次数

为什么 Box&lt;dyn std::error::Error&gt; 不捕获 std::string::FromUtf8Error

我下面有一个简单的程序,它试图打印String从硬编码Vec通过创建的String::from_utf8

我还在这里使用类型别名来减少冗长(例如Result<String, SomeError>vs Result<String>

use std::error;
use std::result;

pub type Error = Box<dyn error::Error>;
pub type Result<T> = result::Result<T, Error>;

fn main() {
    let vec = vec![65; 3];
    let text = String::from_utf8(vec).unwrap();
    println!("result {}", text);
}

fn foo() -> Result<String> {
    let vec = vec![65; 3];
    String::from_utf8(vec)
}
Run Code Online (Sandbox Code Playgroud)

但是该程序无法编译,我收到此错误:

   |
26 | fn foo() -> Result<String> {
   |             -------------- expected `std::result::Result<String, Box<(dyn std::error::Error + 'static)>>` because of return type
27 | …
Run Code Online (Sandbox Code Playgroud)

rust

1
推荐指数
1
解决办法
618
查看次数

标签 统计

rust ×1

typescript ×1