TypeScript 中是不是有一种编译时方法来声明一个 keyof 类型,只有映射到特定类型的键? [复制]
Posted
技术标签:
【中文标题】TypeScript 中是不是有一种编译时方法来声明一个 keyof 类型,只有映射到特定类型的键? [复制]【英文标题】:Is there a compile time way in TypeScript to declare a keyof type, of only the keys that map to a specific type? [duplicate]TypeScript 中是否有一种编译时方法来声明一个 keyof 类型,只有映射到特定类型的键? [复制] 【发布时间】:2021-05-14 12:53:39 【问题描述】:假设我们有以下类型:
interface User
name: string
interface Session
id: string
startTime: number
moderator?: User
student: User
instructor: User
observer: User
有没有办法从Session
获取keyof
,这仅适用于User
类型的键?在这种情况下,这将是 "moderator" | "student" | "instructor" | "observer"
,但不是 "id" | "startTime"
。假设在 任何 版本的 TypeScript 中(如果这已更改或正在开发语言功能),但我使用 4.1.2 作为参考。
编辑相关问题
链接的问题确实完全回答了这个问题,尽管我觉得这种更通用的措辞很有用。我还将User
字段之一设为可选,因为我的真实代码有可选值,这让我很失望。我的具体问题(基于链接的问题)的一个衬里是:
type UserKeys = [K in keyof Session]-?: Session[K] extends User|undefined ? K : never[keyof Session];
*如果您有可选项,请注意 -?
和 User|undefined
。
【问题讨论】:
在这里翻译另一个问题的答案会产生this code。 相关问题确实回答了我的问题,尽管我认为标题可以改进,因为答案不是特定于字符串的。 【参考方案1】:是的,有使用映射类型
type UserKeys =
[Key in keyof Session]: Session[Key] extends User ? Key : never
[keyof Session]
【讨论】:
这是一个正确的答案,但我认为我提出这个问题的方式应该只是链接到相关问题。 当然,我同意!它还显示了一个通用解决方案以上是关于TypeScript 中是不是有一种编译时方法来声明一个 keyof 类型,只有映射到特定类型的键? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
当用户单击 Fx 按钮时,是不是有一种方法可以使 UDF 提供类似于本机 Excel 函数的描述?
在调用 Web 服务时,是不是有一种简单的方法来获取请求的肥皂消息和响应的肥皂消息?
TypeScript:如何在编译时声明固定大小的数组以进行类型检查
当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?
当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?
当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?