Further optional delete corrections (#44862)

* Add more tests.

* Accepted baselines.

* Switch to testing the symbol's flags.

* Accepted baselines.
This commit is contained in:
Daniel Rosenwasser 2021-07-01 18:44:22 -07:00 committed by GitHub
parent e3d6189e3a
commit 248b2c3fc1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 339 additions and 21 deletions

View File

@ -31411,7 +31411,7 @@ namespace ts {
const type = getTypeOfSymbol(symbol);
if (strictNullChecks &&
!(type.flags & (TypeFlags.AnyOrUnknown | TypeFlags.Never)) &&
!(exactOptionalPropertyTypes ? hasQuestionToken(symbol.valueDeclaration!) : getFalsyFlags(type) & TypeFlags.Undefined)) {
!(exactOptionalPropertyTypes ? symbol.flags & SymbolFlags.Optional : getFalsyFlags(type) & TypeFlags.Undefined)) {
error(expr, Diagnostics.The_operand_of_a_delete_operator_must_be_optional);
}
}

View File

@ -1,9 +1,10 @@
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(25,8): error TS2790: The operand of a 'delete' operator must be optional.
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(27,8): error TS2790: The operand of a 'delete' operator must be optional.
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(34,10): error TS2339: Property 'j' does not exist on type 'Foo'.
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(26,8): error TS2790: The operand of a 'delete' operator must be optional.
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(28,8): error TS2790: The operand of a 'delete' operator must be optional.
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(35,10): error TS2339: Property 'j' does not exist on type 'Foo'.
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(46,10): error TS2339: Property 'j' does not exist on type 'Partial<Foo>'.
==== tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts (3 errors) ====
==== tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts (4 errors) ====
interface Foo {
a: number
b: number | undefined
@ -25,6 +26,7 @@ tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.t
}
declare const f: Foo
declare const g: Partial<Foo>
declare const a: AA
declare const b: BB
@ -45,6 +47,19 @@ tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.t
~
!!! error TS2339: Property 'j' does not exist on type 'Foo'.
delete g.a
delete g.b
delete g.c
delete g.d
delete g.e
delete g.f
delete g.g
delete g.h
delete g.i
delete g.j
~
!!! error TS2339: Property 'j' does not exist on type 'Partial<Foo>'.
delete a.a
delete a.b

View File

@ -20,6 +20,7 @@ type BB = {
}
declare const f: Foo
declare const g: Partial<Foo>
declare const a: AA
declare const b: BB
@ -34,6 +35,17 @@ delete f.h
delete f.i
delete f.j
delete g.a
delete g.b
delete g.c
delete g.d
delete g.e
delete g.f
delete g.g
delete g.h
delete g.i
delete g.j
delete a.a
delete a.b
@ -52,6 +64,16 @@ delete f.g;
delete f.h;
delete f.i;
delete f.j;
delete g.a;
delete g.b;
delete g.c;
delete g.d;
delete g.e;
delete g.f;
delete g.g;
delete g.h;
delete g.i;
delete g.j;
delete a.a;
delete a.b;
delete b.a;

View File

@ -48,12 +48,17 @@ declare const f: Foo
>f : Symbol(f, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 20, 13))
>Foo : Symbol(Foo, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 0, 0))
declare const g: Partial<Foo>
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --))
>Foo : Symbol(Foo, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 0, 0))
declare const a: AA
>a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 22, 13))
>AA : Symbol(AA, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 10, 1))
declare const b: BB
>b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 22, 13))
>b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 23, 13))
>BB : Symbol(BB, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 14, 1))
delete f.a
@ -104,15 +109,63 @@ delete f.i
delete f.j
>f : Symbol(f, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 20, 13))
delete g.a
>g.a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 0, 15))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 0, 15))
delete g.b
>g.b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 1, 13))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 1, 13))
delete g.c
>g.c : Symbol(c, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 2, 25))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>c : Symbol(c, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 2, 25))
delete g.d
>g.d : Symbol(d, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 3, 20))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>d : Symbol(d, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 3, 20))
delete g.e
>g.e : Symbol(e, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 4, 14))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>e : Symbol(e, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 4, 14))
delete g.f
>g.f : Symbol(f, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 5, 32))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>f : Symbol(f, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 5, 32))
delete g.g
>g.g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 6, 33))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 6, 33))
delete g.h
>g.h : Symbol(h, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 7, 14))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>h : Symbol(h, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 7, 14))
delete g.i
>g.i : Symbol(i, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 8, 10))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>i : Symbol(i, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 8, 10))
delete g.j
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
delete a.a
>a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 22, 13))
delete a.b
>a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 22, 13))
delete b.a
>b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 22, 13))
>b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 23, 13))
delete b.b
>b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 22, 13))
>b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 23, 13))

View File

@ -45,6 +45,9 @@ type BB = {
declare const f: Foo
>f : Foo
declare const g: Partial<Foo>
>g : Partial<Foo>
declare const a: AA
>a : AA
@ -111,6 +114,66 @@ delete f.j
>f : Foo
>j : any
delete g.a
>delete g.a : boolean
>g.a : number | undefined
>g : Partial<Foo>
>a : number | undefined
delete g.b
>delete g.b : boolean
>g.b : number | undefined
>g : Partial<Foo>
>b : number | undefined
delete g.c
>delete g.c : boolean
>g.c : number | null | undefined
>g : Partial<Foo>
>c : number | null | undefined
delete g.d
>delete g.d : boolean
>g.d : number | undefined
>g : Partial<Foo>
>d : number | undefined
delete g.e
>delete g.e : boolean
>g.e : number | null | undefined
>g : Partial<Foo>
>e : number | null | undefined
delete g.f
>delete g.f : boolean
>g.f : number | null | undefined
>g : Partial<Foo>
>f : number | null | undefined
delete g.g
>delete g.g : boolean
>g.g : unknown
>g : Partial<Foo>
>g : unknown
delete g.h
>delete g.h : boolean
>g.h : any
>g : Partial<Foo>
>h : any
delete g.i
>delete g.i : boolean
>g.i : undefined
>g : Partial<Foo>
>i : undefined
delete g.j
>delete g.j : boolean
>g.j : any
>g : Partial<Foo>
>j : any
delete a.a
>delete a.a : boolean
>a.a : number

View File

@ -1,11 +1,12 @@
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(25,8): error TS2790: The operand of a 'delete' operator must be optional.
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(26,8): error TS2790: The operand of a 'delete' operator must be optional.
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(27,8): error TS2790: The operand of a 'delete' operator must be optional.
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(29,8): error TS2790: The operand of a 'delete' operator must be optional.
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(34,10): error TS2339: Property 'j' does not exist on type 'Foo'.
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(28,8): error TS2790: The operand of a 'delete' operator must be optional.
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(30,8): error TS2790: The operand of a 'delete' operator must be optional.
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(35,10): error TS2339: Property 'j' does not exist on type 'Foo'.
tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts(46,10): error TS2339: Property 'j' does not exist on type 'Partial<Foo>'.
==== tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts (5 errors) ====
==== tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts (6 errors) ====
interface Foo {
a: number
b: number | undefined
@ -27,6 +28,7 @@ tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.t
}
declare const f: Foo
declare const g: Partial<Foo>
declare const a: AA
declare const b: BB
@ -51,6 +53,19 @@ tests/cases/compiler/deleteExpressionMustBeOptional_exactOptionalPropertyTypes.t
~
!!! error TS2339: Property 'j' does not exist on type 'Foo'.
delete g.a
delete g.b
delete g.c
delete g.d
delete g.e
delete g.f
delete g.g
delete g.h
delete g.i
delete g.j
~
!!! error TS2339: Property 'j' does not exist on type 'Partial<Foo>'.
delete a.a
delete a.b

View File

@ -20,6 +20,7 @@ type BB = {
}
declare const f: Foo
declare const g: Partial<Foo>
declare const a: AA
declare const b: BB
@ -34,6 +35,17 @@ delete f.h
delete f.i
delete f.j
delete g.a
delete g.b
delete g.c
delete g.d
delete g.e
delete g.f
delete g.g
delete g.h
delete g.i
delete g.j
delete a.a
delete a.b
@ -52,6 +64,16 @@ delete f.g;
delete f.h;
delete f.i;
delete f.j;
delete g.a;
delete g.b;
delete g.c;
delete g.d;
delete g.e;
delete g.f;
delete g.g;
delete g.h;
delete g.i;
delete g.j;
delete a.a;
delete a.b;
delete b.a;

View File

@ -48,12 +48,17 @@ declare const f: Foo
>f : Symbol(f, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 20, 13))
>Foo : Symbol(Foo, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 0, 0))
declare const g: Partial<Foo>
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --))
>Foo : Symbol(Foo, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 0, 0))
declare const a: AA
>a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 22, 13))
>AA : Symbol(AA, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 10, 1))
declare const b: BB
>b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 22, 13))
>b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 23, 13))
>BB : Symbol(BB, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 14, 1))
delete f.a
@ -104,15 +109,63 @@ delete f.i
delete f.j
>f : Symbol(f, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 20, 13))
delete g.a
>g.a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 0, 15))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 0, 15))
delete g.b
>g.b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 1, 13))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 1, 13))
delete g.c
>g.c : Symbol(c, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 2, 25))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>c : Symbol(c, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 2, 25))
delete g.d
>g.d : Symbol(d, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 3, 20))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>d : Symbol(d, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 3, 20))
delete g.e
>g.e : Symbol(e, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 4, 14))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>e : Symbol(e, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 4, 14))
delete g.f
>g.f : Symbol(f, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 5, 32))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>f : Symbol(f, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 5, 32))
delete g.g
>g.g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 6, 33))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 6, 33))
delete g.h
>g.h : Symbol(h, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 7, 14))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>h : Symbol(h, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 7, 14))
delete g.i
>g.i : Symbol(i, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 8, 10))
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>i : Symbol(i, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 8, 10))
delete g.j
>g : Symbol(g, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
delete a.a
>a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 22, 13))
delete a.b
>a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 21, 13))
>a : Symbol(a, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 22, 13))
delete b.a
>b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 22, 13))
>b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 23, 13))
delete b.b
>b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 22, 13))
>b : Symbol(b, Decl(deleteExpressionMustBeOptional_exactOptionalPropertyTypes.ts, 23, 13))

View File

@ -45,6 +45,9 @@ type BB = {
declare const f: Foo
>f : Foo
declare const g: Partial<Foo>
>g : Partial<Foo>
declare const a: AA
>a : AA
@ -111,6 +114,66 @@ delete f.j
>f : Foo
>j : any
delete g.a
>delete g.a : boolean
>g.a : number | undefined
>g : Partial<Foo>
>a : number | undefined
delete g.b
>delete g.b : boolean
>g.b : number | undefined
>g : Partial<Foo>
>b : number | undefined
delete g.c
>delete g.c : boolean
>g.c : number | null | undefined
>g : Partial<Foo>
>c : number | null | undefined
delete g.d
>delete g.d : boolean
>g.d : number | undefined
>g : Partial<Foo>
>d : number | undefined
delete g.e
>delete g.e : boolean
>g.e : number | null | undefined
>g : Partial<Foo>
>e : number | null | undefined
delete g.f
>delete g.f : boolean
>g.f : number | null | undefined
>g : Partial<Foo>
>f : number | null | undefined
delete g.g
>delete g.g : boolean
>g.g : unknown
>g : Partial<Foo>
>g : unknown
delete g.h
>delete g.h : boolean
>g.h : any
>g : Partial<Foo>
>h : any
delete g.i
>delete g.i : boolean
>g.i : undefined
>g : Partial<Foo>
>i : undefined
delete g.j
>delete g.j : boolean
>g.j : any
>g : Partial<Foo>
>j : any
delete a.a
>delete a.a : boolean
>a.a : number

View File

@ -22,6 +22,7 @@ type BB = {
}
declare const f: Foo
declare const g: Partial<Foo>
declare const a: AA
declare const b: BB
@ -36,6 +37,17 @@ delete f.h
delete f.i
delete f.j
delete g.a
delete g.b
delete g.c
delete g.d
delete g.e
delete g.f
delete g.g
delete g.h
delete g.i
delete g.j
delete a.a
delete a.b