Skip to content

Commit ddad61e

Browse files
weswighamsandersn
andauthored
Add an overload to Object.freeze that preserves literal types (microsoft#33767)
* Add an overload to Object.freeze that preserves literal types * Accept changes baselines Co-authored-by: Nathan Shively-Sanders <[email protected]>
1 parent 0a24dee commit ddad61e

34 files changed

+120
-114
lines changed

Diff for: src/lib/es5.d.ts

+6
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,12 @@ interface ObjectConstructor {
206206
*/
207207
freeze<T extends Function>(f: T): T;
208208

209+
/**
210+
* Prevents the modification of existing property attributes and values, and prevents the addition of new properties.
211+
* @param o Object on which to lock the attributes.
212+
*/
213+
freeze<T extends {[idx: string]: U | null | undefined | object}, U extends string | bigint | number | symbol>(o: T): Readonly<T>;
214+
209215
/**
210216
* Prevents the modification of existing property attributes and values, and prevents the addition of new properties.
211217
* @param o Object on which to lock the attributes.

Diff for: tests/baselines/reference/circularContextualReturnType.symbols

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22
// Repro from #17711
33

44
Object.freeze({
5-
>Object.freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
5+
>Object.freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
66
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
7-
>freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
7+
>freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
88

99
foo() {
1010
>foo : Symbol(foo, Decl(circularContextualReturnType.ts, 2, 15))
1111

1212
return Object.freeze('a');
13-
>Object.freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
13+
>Object.freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
1414
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
15-
>freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
15+
>freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
1616

1717
},
1818
});

Diff for: tests/baselines/reference/circularContextualReturnType.types

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@
33

44
Object.freeze({
55
>Object.freeze({ foo() { return Object.freeze('a'); },}) : Readonly<{ foo(): string; }>
6-
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T>(o: T): Readonly<T>; }
6+
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
77
>Object : ObjectConstructor
8-
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T>(o: T): Readonly<T>; }
8+
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
99
>{ foo() { return Object.freeze('a'); },} : { foo(): string; }
1010

1111
foo() {
1212
>foo : () => string
1313

1414
return Object.freeze('a');
1515
>Object.freeze('a') : string
16-
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T>(o: T): Readonly<T>; }
16+
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
1717
>Object : ObjectConstructor
18-
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T>(o: T): Readonly<T>; }
18+
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
1919
>'a' : "a"
2020

2121
},

Diff for: tests/baselines/reference/destructuringParameterDeclaration4.errors.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(
4141
a1(...array2); // Error parameter type is (number|string)[]
4242
~~~~~~
4343
!!! error TS2552: Cannot find name 'array2'. Did you mean 'Array'?
44-
!!! related TS2728 /.ts/lib.es5.d.ts:1464:13: 'Array' is declared here.
44+
!!! related TS2728 /.ts/lib.es5.d.ts:1470:13: 'Array' is declared here.
4545
a5([1, 2, "string", false, true]); // Error, parameter type is [any, any, [[any]]]
4646
~~~~~~~~
4747
!!! error TS2322: Type 'string' is not assignable to type '[[any]]'.

Diff for: tests/baselines/reference/destructuringTuple.errors.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ tests/cases/compiler/destructuringTuple.ts(11,60): error TS2769: No overload mat
3333
!!! error TS2769: Overload 2 of 3, '(callbackfn: (previousValue: [], currentValue: number, currentIndex: number, array: number[]) => [], initialValue: []): []', gave the following error.
3434
!!! error TS2769: Type 'never[]' is not assignable to type '[]'.
3535
!!! error TS2769: Target allows only 0 element(s) but source may have more.
36-
!!! related TS6502 /.ts/lib.es5.d.ts:1429:24: The expected type comes from the return type of this signature.
37-
!!! related TS6502 /.ts/lib.es5.d.ts:1435:27: The expected type comes from the return type of this signature.
36+
!!! related TS6502 /.ts/lib.es5.d.ts:1435:24: The expected type comes from the return type of this signature.
37+
!!! related TS6502 /.ts/lib.es5.d.ts:1441:27: The expected type comes from the return type of this signature.
3838
~~
3939
!!! error TS2769: No overload matches this call.
4040
!!! error TS2769: Overload 1 of 2, '(...items: ConcatArray<never>[]): never[]', gave the following error.

Diff for: tests/baselines/reference/duplicateNumericIndexers.errors.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ tests/cases/conformance/types/members/duplicateNumericIndexers.ts(24,5): error T
1010
tests/cases/conformance/types/members/duplicateNumericIndexers.ts(25,5): error TS2374: Duplicate index signature for type 'number'.
1111
tests/cases/conformance/types/members/duplicateNumericIndexers.ts(29,5): error TS2374: Duplicate index signature for type 'number'.
1212
tests/cases/conformance/types/members/duplicateNumericIndexers.ts(30,5): error TS2374: Duplicate index signature for type 'number'.
13-
lib.es5.d.ts(517,5): error TS2374: Duplicate index signature for type 'number'.
14-
lib.es5.d.ts(1450,5): error TS2374: Duplicate index signature for type 'number'.
13+
lib.es5.d.ts(523,5): error TS2374: Duplicate index signature for type 'number'.
14+
lib.es5.d.ts(1456,5): error TS2374: Duplicate index signature for type 'number'.
1515

1616

1717
==== tests/cases/conformance/types/members/duplicateNumericIndexers.ts (12 errors) ====

Diff for: tests/baselines/reference/externModule.errors.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -66,20 +66,20 @@ tests/cases/compiler/externModule.ts(37,3): error TS2552: Cannot find name 'XDat
6666
var d=new XDate();
6767
~~~~~
6868
!!! error TS2552: Cannot find name 'XDate'. Did you mean 'Date'?
69-
!!! related TS2728 /.ts/lib.es5.d.ts:927:13: 'Date' is declared here.
69+
!!! related TS2728 /.ts/lib.es5.d.ts:933:13: 'Date' is declared here.
7070
d.getDay();
7171
d=new XDate(1978,2);
7272
~~~~~
7373
!!! error TS2552: Cannot find name 'XDate'. Did you mean 'Date'?
74-
!!! related TS2728 /.ts/lib.es5.d.ts:927:13: 'Date' is declared here.
74+
!!! related TS2728 /.ts/lib.es5.d.ts:933:13: 'Date' is declared here.
7575
d.getXDate();
7676
var n=XDate.parse("3/2/2004");
7777
~~~~~
7878
!!! error TS2552: Cannot find name 'XDate'. Did you mean 'Date'?
79-
!!! related TS2728 /.ts/lib.es5.d.ts:927:13: 'Date' is declared here.
79+
!!! related TS2728 /.ts/lib.es5.d.ts:933:13: 'Date' is declared here.
8080
n=XDate.UTC(1964,2,1);
8181
~~~~~
8282
!!! error TS2552: Cannot find name 'XDate'. Did you mean 'Date'?
83-
!!! related TS2728 /.ts/lib.es5.d.ts:927:13: 'Date' is declared here.
83+
!!! related TS2728 /.ts/lib.es5.d.ts:933:13: 'Date' is declared here.
8484

8585

Diff for: tests/baselines/reference/invalidTypeOfTarget.errors.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ tests/cases/conformance/types/specifyingTypes/typeQueries/invalidTypeOfTarget.ts
3636
var x7: typeof function f() { };
3737
~~~~~~~~
3838
!!! error TS2552: Cannot find name 'function'. Did you mean 'Function'?
39-
!!! related TS2728 /.ts/lib.es5.d.ts:318:13: 'Function' is declared here.
39+
!!! related TS2728 /.ts/lib.es5.d.ts:324:13: 'Function' is declared here.
4040
~
4141
!!! error TS1005: ',' expected.
4242
~

Diff for: tests/baselines/reference/jsEnumTagOnObjectFrozen.symbols

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ cbThing(type => {
4242
/** @enum {string} */
4343
const Thing = Object.freeze({
4444
>Thing : Symbol(Thing, Decl(index.js, 1, 5), Decl(index.js, 0, 4))
45-
>Object.freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
45+
>Object.freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
4646
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
47-
>freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
47+
>freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
4848

4949
a: "thing",
5050
>a : Symbol(a, Decl(index.js, 1, 29))

Diff for: tests/baselines/reference/jsEnumTagOnObjectFrozen.types

+15-15
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
=== tests/cases/compiler/usage.js ===
22
const { Thing, useThing, cbThing } = require("./index");
3-
>Thing : Readonly<{ a: string; b: string; }>
3+
>Thing : Readonly<{ a: "thing"; b: "chill"; }>
44
>useThing : (x: string) => void
55
>cbThing : (x: (x: string) => void) => void
66
>require("./index") : typeof import("tests/cases/compiler/index")
@@ -10,9 +10,9 @@ const { Thing, useThing, cbThing } = require("./index");
1010
useThing(Thing.a);
1111
>useThing(Thing.a) : void
1212
>useThing : (x: string) => void
13-
>Thing.a : string
14-
>Thing : Readonly<{ a: string; b: string; }>
15-
>a : string
13+
>Thing.a : "thing"
14+
>Thing : Readonly<{ a: "thing"; b: "chill"; }>
15+
>a : "thing"
1616

1717
/**
1818
* @typedef {Object} LogEntry
@@ -47,29 +47,29 @@ cbThing(type => {
4747
=== tests/cases/compiler/index.js ===
4848
/** @enum {string} */
4949
const Thing = Object.freeze({
50-
>Thing : Readonly<{ a: string; b: string; }>
51-
>Object.freeze({ a: "thing", b: "chill"}) : Readonly<{ a: string; b: string; }>
52-
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T>(o: T): Readonly<T>; }
50+
>Thing : Readonly<{ a: "thing"; b: "chill"; }>
51+
>Object.freeze({ a: "thing", b: "chill"}) : Readonly<{ a: "thing"; b: "chill"; }>
52+
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
5353
>Object : ObjectConstructor
54-
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T>(o: T): Readonly<T>; }
55-
>{ a: "thing", b: "chill"} : { a: string; b: string; }
54+
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
55+
>{ a: "thing", b: "chill"} : { a: "thing"; b: "chill"; }
5656

5757
a: "thing",
58-
>a : string
58+
>a : "thing"
5959
>"thing" : "thing"
6060

6161
b: "chill"
62-
>b : string
62+
>b : "chill"
6363
>"chill" : "chill"
6464

6565
});
6666

6767
exports.Thing = Thing;
68-
>exports.Thing = Thing : Readonly<{ a: string; b: string; }>
69-
>exports.Thing : Readonly<{ a: string; b: string; }>
68+
>exports.Thing = Thing : Readonly<{ a: "thing"; b: "chill"; }>
69+
>exports.Thing : Readonly<{ a: "thing"; b: "chill"; }>
7070
>exports : typeof import("tests/cases/compiler/index")
71-
>Thing : Readonly<{ a: string; b: string; }>
72-
>Thing : Readonly<{ a: string; b: string; }>
71+
>Thing : Readonly<{ a: "thing"; b: "chill"; }>
72+
>Thing : Readonly<{ a: "thing"; b: "chill"; }>
7373

7474
/**
7575
* @param {Thing} x

Diff for: tests/baselines/reference/keyofAndIndexedAccess.symbols

+2-2
Original file line numberDiff line numberDiff line change
@@ -1933,9 +1933,9 @@ class SampleClass<P> {
19331933
>this.props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 536, 22))
19341934
>this : Symbol(SampleClass, Decl(keyofAndIndexedAccess.ts, 532, 1))
19351935
>props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 536, 22))
1936-
>Object.freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
1936+
>Object.freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
19371937
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
1938-
>freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
1938+
>freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
19391939
>props : Symbol(props, Decl(keyofAndIndexedAccess.ts, 538, 16))
19401940
}
19411941
}

Diff for: tests/baselines/reference/keyofAndIndexedAccess.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -1876,9 +1876,9 @@ class SampleClass<P> {
18761876
>this : this
18771877
>props : Readonly<P>
18781878
>Object.freeze(props) : Readonly<P>
1879-
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T>(o: T): Readonly<T>; }
1879+
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
18801880
>Object : ObjectConstructor
1881-
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T>(o: T): Readonly<T>; }
1881+
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
18821882
>props : P
18831883
}
18841884
}

Diff for: tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty.errors.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ tests/cases/compiler/mappedTypeWithAsClauseAndLateBoundProperty.ts(3,1): error T
77
tgt2 = src2; // Should error
88
~~~~
99
!!! error TS2741: Property 'length' is missing in type '{ [x: number]: number; toString: () => string; toLocaleString: () => string; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => number[]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; find: { <S extends number>(predicate: (this: void, value: number, index: number, obj: number[]) => value is S, thisArg?: any): S; (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any): number; }; findIndex: (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any) => number; fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; keys: () => IterableIterator<number>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D) => FlatArray<A, D>[]; [iterator]: () => IterableIterator<number>; [unscopables]: () => { copyWithin: boolean; entries: boolean; fill: boolean; find: boolean; findIndex: boolean; keys: boolean; values: boolean; }; }' but required in type 'number[]'.
10-
!!! related TS2728 /.ts/lib.es5.d.ts:1273:5: 'length' is declared here.
10+
!!! related TS2728 /.ts/lib.es5.d.ts:1279:5: 'length' is declared here.
1111

Diff for: tests/baselines/reference/narrowExceptionVariableInCatchClause.errors.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ tests/cases/conformance/types/any/narrowExceptionVariableInCatchClause.ts(16,17)
2424
err.massage; // ERROR: Property 'massage' does not exist on type 'Error'
2525
~~~~~~~
2626
!!! error TS2551: Property 'massage' does not exist on type 'Error'. Did you mean 'message'?
27-
!!! related TS2728 /.ts/lib.es5.d.ts:1023:5: 'message' is declared here.
27+
!!! related TS2728 /.ts/lib.es5.d.ts:1029:5: 'message' is declared here.
2828
}
2929

3030
else {

Diff for: tests/baselines/reference/narrowFromAnyWithInstanceof.errors.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ tests/cases/conformance/types/any/narrowFromAnyWithInstanceof.ts(22,7): error TS
2222
x.mesage;
2323
~~~~~~
2424
!!! error TS2551: Property 'mesage' does not exist on type 'Error'. Did you mean 'message'?
25-
!!! related TS2728 /.ts/lib.es5.d.ts:1023:5: 'message' is declared here.
25+
!!! related TS2728 /.ts/lib.es5.d.ts:1029:5: 'message' is declared here.
2626
}
2727

2828
if (x instanceof Date) {
2929
x.getDate();
3030
x.getHuors();
3131
~~~~~~~~
3232
!!! error TS2551: Property 'getHuors' does not exist on type 'Date'. Did you mean 'getHours'?
33-
!!! related TS2728 /.ts/lib.es5.d.ts:783:5: 'getHours' is declared here.
33+
!!! related TS2728 /.ts/lib.es5.d.ts:789:5: 'getHours' is declared here.
3434
}
3535

Diff for: tests/baselines/reference/narrowFromAnyWithTypePredicate.errors.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,14 @@ tests/cases/conformance/types/any/narrowFromAnyWithTypePredicate.ts(33,7): error
4141
x.mesage;
4242
~~~~~~
4343
!!! error TS2551: Property 'mesage' does not exist on type 'Error'. Did you mean 'message'?
44-
!!! related TS2728 /.ts/lib.es5.d.ts:1023:5: 'message' is declared here.
44+
!!! related TS2728 /.ts/lib.es5.d.ts:1029:5: 'message' is declared here.
4545
}
4646

4747
if (isDate(x)) {
4848
x.getDate();
4949
x.getHuors();
5050
~~~~~~~~
5151
!!! error TS2551: Property 'getHuors' does not exist on type 'Date'. Did you mean 'getHours'?
52-
!!! related TS2728 /.ts/lib.es5.d.ts:783:5: 'getHours' is declared here.
52+
!!! related TS2728 /.ts/lib.es5.d.ts:789:5: 'getHours' is declared here.
5353
}
5454

0 commit comments

Comments
 (0)