You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:22:47