如何将TypeScript的Properties<T>类型转为Scala.js外观定义?
TypeScript
Properties<T> 的 Scala.js 等价写法 你的 TypeScript 代码定义了一个泛型类型,作用是将输入类型 T 的所有属性转为可选状态(每个属性可以是原类型值、undefined,或者直接省略):
type Properties<T> = { [P in keyof T]?: T[P] };
在 Scala.js 中,由于没有 TypeScript 那样的映射类型语法,需要结合结构类型和 js.UndefOr 来实现等价效果,以下是两种常用写法:
泛型版本(通用场景)
这种写法适用于任意 JS 对象类型 T,允许你访问对象的任意属性并获得可选类型的返回值:
import scala.scalajs.js type Properties[T] = js.Object { def selectDynamic[K <: String](key: K): js.UndefOr[T @unchecked] }
具体类型版本(类型更精确)
如果 T 是一个具体的 JS trait,可以直接定义对应的可选属性 trait,类型检查会更严格:
比如先定义原类型:
@js.native trait User extends js.Object { val name: String = js.native val age: Int = js.native }
对应的可选属性版本:
@js.native trait UserProperties extends js.Object { val name: js.UndefOr[String] = js.native val age: js.UndefOr[Int] = js.native }
内容的提问来源于stack exchange,提问作者user79074
相关产品推荐
相关产品推荐

