假设我们有以下类型:
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
,如果你有可选的。
可以使用映射类型
type UserKeys = {
[Key in keyof Session]: Session[Key] extends User ? Key : never
}[keyof Session]