`web-sys` 中的类型转换
WebIDL(所有 Web API 的接口定义语言) 中指定的大多数类型都相对简单地转换为 `web-sys`,但值得特别指出一些类型
-
BufferSource
和ArrayBufferView
- 这两种类型出现在许多通常处理字节缓冲区的 API 中。我们在 `web-sys` 中使用两种不同的类型绑定它们:`js_sys::Object` 和 `&mut [u8]`。使用 `js_sys::Object` 可以传入表示字节视图的任意 JS 值(如任何类型化数组对象),而 `&mut [u8]` 允许在 Rust 中使用原始切片。不幸的是,我们必须悲观地假设 JS 会修改所有切片,因为我们目前没有它们是否被修改的信息。 -
回调都表示为 `js_sys::Function`。这意味着通过 `web-sys` 的所有回调都是原始 JS 值。你可以通过以下方式来处理它:或者操作实际的 `js_sys::Function` 实例,或者创建一个 `Closure<dyn FnMut(...)>`,使用 `as_ref` 提取底层的 `JsValue`,然后使用 `JsCast::unchecked_ref` 将其转换为 `js_sys::Function`。