在 TypeScript 中,这不是编译:
export interface Generic<T extends string> {
}
export interface Class<T extends string[]> {
readonly prop: { [P in keyof T]: Generic<T[P]> }
}
特别是,Generic<T[P]>
失败与Type 'T[P]' does not satisfy the constraint 'string'.
. 但是,既然T extends string[]
,可以肯定的是,T[P] extends string
对于任何P in keyof T
.
我在这里做错了什么?
我知道我可以用条件类型解决问题:
export interface Class<T extends string[]> {
readonly prop: { [P in keyof T]: T[P] extends string ? Generic<T[P]> : never }
}
但我不明白,为什么这应该是必要的。