Для объявления типа, который является коллекцией значений разных типов, можно использовать параметры типа (generics) и ограничения типа (type bounds). В данном случае, можно объявить тип с помощью параметра типа `T`, который ограничен trait-ом `Into<JsValue>`.
Вот пример объявления такого типа:
```rust
use wasm_bindgen::JsValue;
fn main() {
struct MyCollection<T: Into<JsValue>> {
values: Vec<T>,
}
let collection: MyCollection<&dyn Into<JsValue>> = MyCollection {
values: vec![1, "hello", JsValue::from(3.14)],
};
}
```
В этом примере, `MyCollection<T>` является структурой, которая имеет поле `values` типа `Vec<T>`, где `T` ограничен trait-ом `Into<JsValue>`. Затем, мы создаем экземпляр `MyCollection<&dyn Into<JsValue>>` и инициализируем его значениями разных типов, которые могут быть сконвертированы в `JsValue`.
Обратите внимание на использование `&dyn Into<JsValue>` вместо `T` в объявлении переменной `collection`. Это связано с тем, что Rust не позволяет напрямую использовать trait-ы в качестве типов в параметрах типа, поэтому мы можем использовать указатель на trait (`&dyn Into<JsValue>`) вместо него.
Надеюсь, это ответит на ваш вопрос!