=== tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts === interface Foo { a: number >a : number b: number | undefined >b : number | undefined c: number | null >c : number | null >null : null d?: number >d : number | undefined e: number | undefined | null >e : number | null | undefined >null : null f?: number | undefined | null >f : number | null | undefined >null : null g: unknown >g : unknown h: any >h : any i: never >i : never } interface AA { [s: string]: number >s : string } type BB = { >BB : BB [P in keyof any]: number } declare const f: Foo >f : Foo declare const g: Partial >g : Partial declare const a: AA >a : AA declare const b: BB >b : BB delete f.a >delete f.a : boolean >f.a : number >f : Foo >a : number delete f.b >delete f.b : boolean >f.b : number | undefined >f : Foo >b : number | undefined delete f.c >delete f.c : boolean >f.c : number | null >f : Foo >c : number | null delete f.d >delete f.d : boolean >f.d : number | undefined >f : Foo >d : number | undefined delete f.e >delete f.e : boolean >f.e : number | null | undefined >f : Foo >e : number | null | undefined delete f.f >delete f.f : boolean >f.f : number | null | undefined >f : Foo >f : number | null | undefined delete f.g >delete f.g : boolean >f.g : unknown >f : Foo >g : unknown delete f.h >delete f.h : boolean >f.h : any >f : Foo >h : any delete f.i >delete f.i : boolean >f.i : never >f : Foo >i : never delete f.j >delete f.j : boolean >f.j : any >f : Foo >j : any delete g.a >delete g.a : boolean >g.a : number | undefined >g : Partial >a : number | undefined delete g.b >delete g.b : boolean >g.b : number | undefined >g : Partial >b : number | undefined delete g.c >delete g.c : boolean >g.c : number | null | undefined >g : Partial >c : number | null | undefined delete g.d >delete g.d : boolean >g.d : number | undefined >g : Partial >d : number | undefined delete g.e >delete g.e : boolean >g.e : number | null | undefined >g : Partial >e : number | null | undefined delete g.f >delete g.f : boolean >g.f : number | null | undefined >g : Partial >f : number | null | undefined delete g.g >delete g.g : boolean >g.g : unknown >g : Partial >g : unknown delete g.h >delete g.h : boolean >g.h : any >g : Partial >h : any delete g.i >delete g.i : boolean >g.i : undefined >g : Partial >i : undefined delete g.j >delete g.j : boolean >g.j : any >g : Partial >j : any delete a.a >delete a.a : boolean >a.a : number >a : AA >a : number delete a.b >delete a.b : boolean >a.b : number >a : AA >b : number delete b.a >delete b.a : boolean >b.a : number >b : BB >a : number delete b.b >delete b.b : boolean >b.b : number >b : BB >b : number