我正在构建一个类型,该类型判断类类型的成员是否是对象,如果是,则必须指定一个特定类型.我在下面提供了一个更具解释性的示例.
这里有一个我们将要使用的类示例.
declare class myObject {
name?: string
id?: number
parent?: {
child: number
}
}
这是我要做的类型
type myType<T> = {
[K in keyof T]: T[K] extends {[k:string]:any} ? T[K] : "something"
}
它应该判断parent
个成员实际上是该类型的对象,并允许这样的事情
const example: myType<myObject> = {
parent: {
child: 0
},
name: "something"
id: "something"
但事实并非如此,因为parent?
不能与{[k:string]:any}
成功对比.这是因为parent?
是可选成员.如果我把parent?
改为parent
,它会像预期的那样工作.为了解决这个问题,我试着把{[k:string]:any}
换成{[Z in keyof T[K]]?: T[K][Z]}
,但我观察到了同样的行为.