【发布时间】:2021-08-05 02:06:34
【问题描述】:
我正在尝试使用省略了属性的子类型,并使用通用索引签名将其分配给其父类型。我试图理解为什么它会让这种情况发生只有属性是相同的类型。
例如,这一切都很好:
interface Obj {
foo: number
bar: number
baz: number
}
type Sub = Omit<Obj, "baz">
let obj: Obj = {foo: 1, bar: 1, baz: 1}
function fn <K extends keyof Sub>(key: K, val: Sub[K]) {
obj[key] = val
}
在这个问题上,编译器抱怨“类型'Sub[K]'不可分配给类型'Obj[K]'。 “Sub”类型中缺少属性“baz”,但在“Obj”类型中是必需的”
interface Obj {
foo: number
bar: string
baz: number
}
感谢您的帮助!
【问题讨论】:
标签: typescript typescript-generics