小编TPR*_*eal的帖子

使用 Deno 编译时如何使用 lib.dom.d.ts 中的类型?

我使用 Deno 编译一些 TypeScript,然后将其作为网页的一部分提供,以便它在浏览器端运行。我正在尝试在客户端使用 canvas 元素,为此我需要类似CanvasRenderingContext2Dor 的类型CanvasGradient,它们在lib.dom.d.ts中定义,但它们不可用:Deno 编译给出类似 的错误TS2304 [ERROR]: Cannot find name 'CanvasRenderingContext2D'.。(另一方面,类型Path2D(在同一文件中定义)不会引起问题。)

注意:我知道当代码在浏览器中运行时,这些类型将存在于运行时,但我希望 Deno 在编译时了解它们。

我尝试以某种方式包含 .d.ts 文件。我尝试过的事情:

  • "libs": ["deno.window", "esnext"]在编译器选项中指定等(在 deno.json 中)。
  • 像这样导入类型:
/// <reference types="https://raw.githubusercontent.com/microsoft/TypeScript/main/lib/lib.dom.d.ts" />
Run Code Online (Sandbox Code Playgroud)
  • 或这个:
// @deno-types="https://raw.githubusercontent.com/microsoft/TypeScript/main/lib/lib.dom.d.ts"
Run Code Online (Sandbox Code Playgroud)

其中一些尝试根本不起作用,有些甚至明显没有被解析。看起来我不明白 Deno 如何加载类型定义,例如它Path2D从哪里加载类型声明。如何解决这个问题?

dom typescript deno

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

检查 Option&lt;String&gt; 是否为 Some(my_string)

我想知道检查q: Option<String>我拥有的 a 是否具有特定字符串的值的最惯用的方法是什么my_string: String。所以最直接的解决办法是:

if q.is_some() && q.unwrap() == my_string
Run Code Online (Sandbox Code Playgroud)

我能想到的另一种:

if q.unwrap_or_default() == my_string
Run Code Online (Sandbox Code Playgroud)

但这在my_string空的极端情况下不起作用。

另一个:

match q {
  Some(s) if s == my_string => {
    ...
  },
  _ => {},
}
Run Code Online (Sandbox Code Playgroud)

但这是非常冗长的。

有没有更简单的东西,比如一些聪明的东西if let

rust

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

如何在不使用 tokio::spawn 的情况下循环运行多个 Tokio 异步任务?

我制作了一个 LED 时钟,它还可以显示天气。我的程序在循环中执行几件不同的事情,每件事情都有不同的时间间隔:

  • 每 50 毫秒更新一次 LED,
  • 每 1 秒检查一次灯光级别(以调整亮度),
  • 每 10 分钟获取一次天气信息,
  • 实际上还有更多,但这无关紧要。

更新 LED 是最关键的:我不希望在获取天气等信息时延迟更新。这应该不是问题,因为获取天气主要是异步 HTTP 调用。

这是我的代码:

let mut measure_light_stream = tokio::time::interval(Duration::from_secs(1));
let mut update_weather_stream = tokio::time::interval(WEATHER_FETCH_INTERVAL);
let mut update_leds_stream = tokio::time::interval(UPDATE_LEDS_INTERVAL);
loop {
    tokio::select! {
      _ = measure_light_stream.tick() => {
        let light = lm.get_light();
        light_smooth.sp = light;
      },
      _ = update_weather_stream.tick() => {
        let fetched_weather = weather_service.get(&config).await;
        // Store the fetched weather for later access from the displaying function.
        weather_clock.weather = fetched_weather.clone();
      },
      _ = update_leds_stream.tick() …
Run Code Online (Sandbox Code Playgroud)

asynchronous rust rust-tokio

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

标签 统计

rust ×2

asynchronous ×1

deno ×1

dom ×1

rust-tokio ×1

typescript ×1