diff --git a/src/lib/es5.d.ts b/src/lib/es5.d.ts index 8c11be587a10f..15dc7a4ab242e 100644 --- a/src/lib/es5.d.ts +++ b/src/lib/es5.d.ts @@ -1463,7 +1463,9 @@ type Extract = T extends U ? T : never; /** * Construct a type with the properties of T except for those in type K. */ -type Omit = Pick>; +type Omit = { + [P in Exclude]: T[P]; +}; /** * Exclude null and undefined from T diff --git a/tests/baselines/reference/genericIsNeverEmptyObject.types b/tests/baselines/reference/genericIsNeverEmptyObject.types index 5d2b4d9d57f53..3a49e723e7600 100644 --- a/tests/baselines/reference/genericIsNeverEmptyObject.types +++ b/tests/baselines/reference/genericIsNeverEmptyObject.types @@ -2,18 +2,18 @@ // Repro from #29067 function test(obj: T) { ->test : (obj: T) => Pick> & { b: string; } +>test : (obj: T) => Omit & { b: string; } >a : string >obj : T let { a, ...rest } = obj; >a : string ->rest : Pick> +>rest : Omit >obj : T return { ...rest, b: a }; ->{ ...rest, b: a } : Pick> & { b: string; } ->rest : Pick> +>{ ...rest, b: a } : Omit & { b: string; } +>rest : Omit >b : string >a : string } @@ -30,7 +30,7 @@ let o2: { b: string, x: number } = test(o1); >o2 : { b: string; x: number; } >b : string >x : number ->test(o1) : Pick<{ a: string; x: number; }, "x"> & { b: string; } ->test : (obj: T) => Pick> & { b: string; } +>test(o1) : Omit<{ a: string; x: number; }, "a"> & { b: string; } +>test : (obj: T) => Omit & { b: string; } >o1 : { a: string; x: number; } diff --git a/tests/baselines/reference/genericObjectRest.types b/tests/baselines/reference/genericObjectRest.types index c2fcaad7cb87c..ba5145dccba19 100644 --- a/tests/baselines/reference/genericObjectRest.types +++ b/tests/baselines/reference/genericObjectRest.types @@ -16,7 +16,7 @@ function f1(obj: T) { let { a: a1, ...r1 } = obj; >a : any >a1 : string ->r1 : Pick> +>r1 : Omit >obj : T let { a: a2, b: b2, ...r2 } = obj; @@ -24,24 +24,24 @@ function f1(obj: T) { >a2 : string >b : any >b2 : number ->r2 : Pick> +>r2 : Omit >obj : T let { 'a': a3, ...r3 } = obj; >a3 : string ->r3 : Pick> +>r3 : Omit >obj : T let { ['a']: a4, ...r4 } = obj; >'a' : "a" >a4 : string ->r4 : Pick> +>r4 : Omit >obj : T let { [a]: a5, ...r5 } = obj; >a : "a" >a5 : string ->r5 : Pick> +>r5 : Omit >obj : T } @@ -68,7 +68,7 @@ function f2(obj: T) { >a1 : string >sb : unique symbol >b1 : number ->r1 : Pick> +>r1 : Omit >obj : T } @@ -83,7 +83,7 @@ function f3(obj: T, k1: K1, k2: K2) { >a1 : T[K1] >k2 : K2 >a2 : T[K2] ->r1 : Pick> +>r1 : Omit >obj : T } @@ -104,7 +104,7 @@ function f4(obj: Item, k1: K1, k2: >a1 : Item[K1] >k2 : K2 >a2 : Item[K2] ->r1 : Pick | Exclude<"b", K1 | K2> | Exclude<"c", K1 | K2>> +>r1 : Omit >obj : Item } diff --git a/tests/baselines/reference/literalTypeWidening.types b/tests/baselines/reference/literalTypeWidening.types index 8fed2df9986e4..3e50bdcd2814f 100644 --- a/tests/baselines/reference/literalTypeWidening.types +++ b/tests/baselines/reference/literalTypeWidening.types @@ -443,15 +443,15 @@ function test(obj: T): T { let { a, ...rest } = obj; >a : string ->rest : Pick> +>rest : Omit >obj : T return { a: 'hello', ...rest } as T; >{ a: 'hello', ...rest } as T : T ->{ a: 'hello', ...rest } : { a: string; } & Pick> +>{ a: 'hello', ...rest } : { a: string; } & Omit >a : string >'hello' : "hello" ->rest : Pick> +>rest : Omit } // Repro from #32169 diff --git a/tests/baselines/reference/mappedTypeConstraints.symbols b/tests/baselines/reference/mappedTypeConstraints.symbols index 3601ffc3de848..4a793fd0dc388 100644 --- a/tests/baselines/reference/mappedTypeConstraints.symbols +++ b/tests/baselines/reference/mappedTypeConstraints.symbols @@ -132,9 +132,9 @@ const modifier = (targetProps: T) => { >targetProps : Symbol(targetProps, Decl(mappedTypeConstraints.ts, 30, 41)) rest.foo; ->rest.foo : Symbol(foo, Decl(mappedTypeConstraints.ts, 25, 20)) +>rest.foo : Symbol(foo) >rest : Symbol(rest, Decl(mappedTypeConstraints.ts, 31, 13)) ->foo : Symbol(foo, Decl(mappedTypeConstraints.ts, 25, 20)) +>foo : Symbol(foo) }; diff --git a/tests/baselines/reference/mappedTypeConstraints.types b/tests/baselines/reference/mappedTypeConstraints.types index 3e42e2a2e9800..98ae325e6be91 100644 --- a/tests/baselines/reference/mappedTypeConstraints.types +++ b/tests/baselines/reference/mappedTypeConstraints.types @@ -98,12 +98,12 @@ const modifier = (targetProps: T) => { let {bar, ...rest} = targetProps; >bar : string ->rest : Pick> +>rest : Omit >targetProps : T rest.foo; >rest.foo : T["foo"] ->rest : Pick> +>rest : Omit >foo : T["foo"] }; diff --git a/tests/baselines/reference/objectRestNegative.types b/tests/baselines/reference/objectRestNegative.types index 58ed1902f6dd4..7cc174299e484 100644 --- a/tests/baselines/reference/objectRestNegative.types +++ b/tests/baselines/reference/objectRestNegative.types @@ -36,18 +36,18 @@ function stillMustBeLast({ ...mustBeLast, a }: { a: number, b: string }): void { >b : string } function generic(t: T) { ->generic : (t: T) => Pick> +>generic : (t: T) => Omit >x : any >y : any >t : T let { x, ...rest } = t; >x : any ->rest : Pick> +>rest : Omit >t : T return rest; ->rest : Pick> +>rest : Omit } let rest: { b: string } diff --git a/tests/baselines/reference/omitTypeHelperModifiers01.symbols b/tests/baselines/reference/omitTypeHelperModifiers01.symbols index 39a3360678138..a5cc8be34f303 100644 --- a/tests/baselines/reference/omitTypeHelperModifiers01.symbols +++ b/tests/baselines/reference/omitTypeHelperModifiers01.symbols @@ -28,42 +28,42 @@ function f(x: B) { const b = x.b; >b : Symbol(b, Decl(omitTypeHelperModifiers01.ts, 10, 9)) ->x.b : Symbol(b, Decl(omitTypeHelperModifiers01.ts, 1, 14)) +>x.b : Symbol(b) >x : Symbol(x, Decl(omitTypeHelperModifiers01.ts, 9, 11)) ->b : Symbol(b, Decl(omitTypeHelperModifiers01.ts, 1, 14)) +>b : Symbol(b) x.b = "hello"; ->x.b : Symbol(b, Decl(omitTypeHelperModifiers01.ts, 1, 14)) +>x.b : Symbol(b) >x : Symbol(x, Decl(omitTypeHelperModifiers01.ts, 9, 11)) ->b : Symbol(b, Decl(omitTypeHelperModifiers01.ts, 1, 14)) +>b : Symbol(b) x.b = undefined; ->x.b : Symbol(b, Decl(omitTypeHelperModifiers01.ts, 1, 14)) +>x.b : Symbol(b) >x : Symbol(x, Decl(omitTypeHelperModifiers01.ts, 9, 11)) ->b : Symbol(b, Decl(omitTypeHelperModifiers01.ts, 1, 14)) +>b : Symbol(b) >undefined : Symbol(undefined) const c = x.c; >c : Symbol(c, Decl(omitTypeHelperModifiers01.ts, 14, 9)) ->x.c : Symbol(c, Decl(omitTypeHelperModifiers01.ts, 2, 15)) +>x.c : Symbol(c) >x : Symbol(x, Decl(omitTypeHelperModifiers01.ts, 9, 11)) ->c : Symbol(c, Decl(omitTypeHelperModifiers01.ts, 2, 15)) +>c : Symbol(c) x.c = true; ->x.c : Symbol(c, Decl(omitTypeHelperModifiers01.ts, 2, 15)) +>x.c : Symbol(c) >x : Symbol(x, Decl(omitTypeHelperModifiers01.ts, 9, 11)) ->c : Symbol(c, Decl(omitTypeHelperModifiers01.ts, 2, 15)) +>c : Symbol(c) const d = x.d; >d : Symbol(d, Decl(omitTypeHelperModifiers01.ts, 17, 9)) ->x.d : Symbol(d, Decl(omitTypeHelperModifiers01.ts, 3, 24)) +>x.d : Symbol(d) >x : Symbol(x, Decl(omitTypeHelperModifiers01.ts, 9, 11)) ->d : Symbol(d, Decl(omitTypeHelperModifiers01.ts, 3, 24)) +>d : Symbol(d) x.d = d; ->x.d : Symbol(d, Decl(omitTypeHelperModifiers01.ts, 3, 24)) +>x.d : Symbol(d) >x : Symbol(x, Decl(omitTypeHelperModifiers01.ts, 9, 11)) ->d : Symbol(d, Decl(omitTypeHelperModifiers01.ts, 3, 24)) +>d : Symbol(d) >d : Symbol(d, Decl(omitTypeHelperModifiers01.ts, 17, 9)) } diff --git a/tests/baselines/reference/omitTypeHelperModifiers01.types b/tests/baselines/reference/omitTypeHelperModifiers01.types index da5f61b698602..1053648d6daf4 100644 --- a/tests/baselines/reference/omitTypeHelperModifiers01.types +++ b/tests/baselines/reference/omitTypeHelperModifiers01.types @@ -17,55 +17,55 @@ type A = { }; type B = Omit; ->B : Pick +>B : Omit function f(x: B) { ->f : (x: Pick) => void ->x : Pick +>f : (x: Omit) => void +>x : Omit const b = x.b; >b : string | undefined >x.b : string | undefined ->x : Pick +>x : Omit >b : string | undefined x.b = "hello"; >x.b = "hello" : "hello" >x.b : string | undefined ->x : Pick +>x : Omit >b : string | undefined >"hello" : "hello" x.b = undefined; >x.b = undefined : undefined >x.b : string | undefined ->x : Pick +>x : Omit >b : string | undefined >undefined : undefined const c = x.c; >c : boolean >x.c : boolean ->x : Pick +>x : Omit >c : boolean x.c = true; >x.c = true : true ->x.c : any ->x : Pick ->c : any +>x.c : boolean +>x : Omit +>c : boolean >true : true const d = x.d; >d : unknown >x.d : unknown ->x : Pick +>x : Omit >d : unknown x.d = d; >x.d = d : unknown >x.d : unknown ->x : Pick +>x : Omit >d : unknown >d : unknown } diff --git a/tests/baselines/reference/omitTypeTestErrors01.errors.txt b/tests/baselines/reference/omitTypeTestErrors01.errors.txt index a66ab384b8935..6b65e292b55f4 100644 --- a/tests/baselines/reference/omitTypeTestErrors01.errors.txt +++ b/tests/baselines/reference/omitTypeTestErrors01.errors.txt @@ -1,5 +1,5 @@ -tests/cases/compiler/omitTypeTestErrors01.ts(11,16): error TS2339: Property 'c' does not exist on type 'Pick'. -tests/cases/compiler/omitTypeTestErrors01.ts(15,16): error TS2339: Property 'b' does not exist on type 'Pick'. +tests/cases/compiler/omitTypeTestErrors01.ts(11,16): error TS2339: Property 'c' does not exist on type 'Omit'. +tests/cases/compiler/omitTypeTestErrors01.ts(15,16): error TS2339: Property 'b' does not exist on type 'Omit'. ==== tests/cases/compiler/omitTypeTestErrors01.ts (2 errors) ==== @@ -15,13 +15,13 @@ tests/cases/compiler/omitTypeTestErrors01.ts(15,16): error TS2339: Property 'b' export function getBarC(bar: Bar) { return bar.c; ~ -!!! error TS2339: Property 'c' does not exist on type 'Pick'. +!!! error TS2339: Property 'c' does not exist on type 'Omit'. } export function getBazB(baz: Baz) { return baz.b; ~ -!!! error TS2339: Property 'b' does not exist on type 'Pick'. +!!! error TS2339: Property 'b' does not exist on type 'Omit'. } \ No newline at end of file diff --git a/tests/baselines/reference/omitTypeTestErrors01.types b/tests/baselines/reference/omitTypeTestErrors01.types index e7282016868d6..4b286c2c89cbf 100644 --- a/tests/baselines/reference/omitTypeTestErrors01.types +++ b/tests/baselines/reference/omitTypeTestErrors01.types @@ -11,28 +11,28 @@ interface Foo { } export type Bar = Omit; ->Bar : Pick +>Bar : Omit export type Baz = Omit; ->Baz : Pick +>Baz : Omit export function getBarC(bar: Bar) { ->getBarC : (bar: Pick) => any ->bar : Pick +>getBarC : (bar: Omit) => any +>bar : Omit return bar.c; >bar.c : any ->bar : Pick +>bar : Omit >c : any } export function getBazB(baz: Baz) { ->getBazB : (baz: Pick) => any ->baz : Pick +>getBazB : (baz: Omit) => any +>baz : Omit return baz.b; >baz.b : any ->baz : Pick +>baz : Omit >b : any } diff --git a/tests/baselines/reference/omitTypeTests01.symbols b/tests/baselines/reference/omitTypeTests01.symbols index d614f65daff03..93b492917855a 100644 --- a/tests/baselines/reference/omitTypeTests01.symbols +++ b/tests/baselines/reference/omitTypeTests01.symbols @@ -28,9 +28,9 @@ export function getBarA(bar: Bar) { >Bar : Symbol(Bar, Decl(omitTypeTests01.ts, 4, 1)) return bar.a; ->bar.a : Symbol(a, Decl(omitTypeTests01.ts, 0, 15)) +>bar.a : Symbol(a) >bar : Symbol(bar, Decl(omitTypeTests01.ts, 9, 24)) ->a : Symbol(a, Decl(omitTypeTests01.ts, 0, 15)) +>a : Symbol(a) } export function getBazA(baz: Baz) { @@ -39,9 +39,9 @@ export function getBazA(baz: Baz) { >Baz : Symbol(Baz, Decl(omitTypeTests01.ts, 6, 33)) return baz.a; ->baz.a : Symbol(a, Decl(omitTypeTests01.ts, 0, 15)) +>baz.a : Symbol(a) >baz : Symbol(baz, Decl(omitTypeTests01.ts, 13, 24)) ->a : Symbol(a, Decl(omitTypeTests01.ts, 0, 15)) +>a : Symbol(a) } diff --git a/tests/baselines/reference/omitTypeTests01.types b/tests/baselines/reference/omitTypeTests01.types index c07894ee2dcf6..549fcccc0f2f8 100644 --- a/tests/baselines/reference/omitTypeTests01.types +++ b/tests/baselines/reference/omitTypeTests01.types @@ -11,28 +11,28 @@ interface Foo { } export type Bar = Omit; ->Bar : Pick +>Bar : Omit export type Baz = Omit; ->Baz : Pick +>Baz : Omit export function getBarA(bar: Bar) { ->getBarA : (bar: Pick) => string ->bar : Pick +>getBarA : (bar: Omit) => string +>bar : Omit return bar.a; >bar.a : string ->bar : Pick +>bar : Omit >a : string } export function getBazA(baz: Baz) { ->getBazA : (baz: Pick) => string ->baz : Pick +>getBazA : (baz: Omit) => string +>baz : Omit return baz.a; >baz.a : string ->baz : Pick +>baz : Omit >a : string } diff --git a/tests/baselines/reference/unionAndIntersectionInference3.types b/tests/baselines/reference/unionAndIntersectionInference3.types index 05cb9368f83f6..558698d8a9c4c 100644 --- a/tests/baselines/reference/unionAndIntersectionInference3.types +++ b/tests/baselines/reference/unionAndIntersectionInference3.types @@ -157,7 +157,7 @@ export interface RouteComponentProps { route: string } >route : string declare function withRouter< ->withRouter :

>(component: (C & FunctionComponent

) | (C & ComponentClass

)) => ComponentClass>> +>withRouter :

>(component: (C & FunctionComponent

) | (C & ComponentClass

)) => ComponentClass> P extends RouteComponentProps, C extends ComponentType

@@ -174,8 +174,8 @@ declare const MyComponent: ComponentType; >MyComponent : ComponentType withRouter(MyComponent); ->withRouter(MyComponent) : ComponentClass> ->withRouter :

>(component: (C & FunctionComponent

) | (C & ComponentClass

)) => ComponentClass>> +>withRouter(MyComponent) : ComponentClass> +>withRouter :

>(component: (C & FunctionComponent

) | (C & ComponentClass

)) => ComponentClass> >MyComponent : ComponentType // Repro from #33490