Skip to content

Commit 6ee2f20

Browse files
Accepted baselines.
1 parent 3673a79 commit 6ee2f20

8 files changed

+233
-182
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
tests/cases/compiler/contextualNarrowingFromUnknownToObjects.ts(25,32): error TS2345: Argument of type 'T' is not assignable to parameter of type 'object'.
2+
tests/cases/compiler/contextualNarrowingFromUnknownToObjects.ts(25,65): error TS2345: Argument of type 'T' is not assignable to parameter of type 'object'.
3+
4+
5+
==== tests/cases/compiler/contextualNarrowingFromUnknownToObjects.ts (2 errors) ====
6+
declare function keysOfEmptyObject(o: {}): string[];
7+
declare function keysOfNonPrimitive(o: object): string[];
8+
9+
namespace implicitConstraints {
10+
export function keyLengthsEqualUsingEmptyObjectFn<T>(a: T, b: T): [T, T] | undefined {
11+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
12+
return undefined;
13+
}
14+
if (Array.isArray(a) || Array.isArray(b)) {
15+
return undefined;
16+
}
17+
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
18+
return [a, b];
19+
}
20+
return undefined;
21+
}
22+
23+
export function keyLengthsEqualUsingNonPrimitiveFn<T>(a: T, b: T): [T, T] | undefined {
24+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
25+
return undefined;
26+
}
27+
if (Array.isArray(a) || Array.isArray(b)) {
28+
return undefined;
29+
}
30+
if (keysOfNonPrimitive(a).length !== keysOfNonPrimitive(b).length) {
31+
~
32+
!!! error TS2345: Argument of type 'T' is not assignable to parameter of type 'object'.
33+
~
34+
!!! error TS2345: Argument of type 'T' is not assignable to parameter of type 'object'.
35+
return [a, b];
36+
}
37+
return undefined;
38+
}
39+
}
40+
41+
// Explicit Constraints of 'unknown'
42+
namespace explicitConstraintsOfUnknown {
43+
export function keyLengthsEqualUsingEmptyObjectFn<T extends unknown>(a: T, b: T): [T, T] | undefined {
44+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
45+
return undefined;
46+
}
47+
if (Array.isArray(a) || Array.isArray(b)) {
48+
return undefined;
49+
}
50+
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
51+
return [a, b];
52+
}
53+
return undefined;
54+
}
55+
56+
export function keyLengthsEqualUsingNonPrimitiveFn<T extends unknown>(a: T, b: T): [T, T] | undefined {
57+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
58+
return undefined;
59+
}
60+
if (Array.isArray(a) || Array.isArray(b)) {
61+
return undefined;
62+
}
63+
if (keysOfNonPrimitive(a).length !== keysOfNonPrimitive(b).length) {
64+
return [a, b];
65+
}
66+
return undefined;
67+
}
68+
}
69+

tests/baselines/reference/contextualNarrowingFromUnknownToObjects(strictnullchecks=false).js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
declare function keysOfEmptyObject(o: {}): string[];
33
declare function keysOfNonPrimitive(o: object): string[];
44

5-
namespace explicitConstraints {
5+
namespace implicitConstraints {
66
export function keyLengthsEqualUsingEmptyObjectFn<T>(a: T, b: T): [T, T] | undefined {
77
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
88
return undefined;
@@ -23,7 +23,7 @@ namespace explicitConstraints {
2323
if (Array.isArray(a) || Array.isArray(b)) {
2424
return undefined;
2525
}
26-
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
26+
if (keysOfNonPrimitive(a).length !== keysOfNonPrimitive(b).length) {
2727
return [a, b];
2828
}
2929
return undefined;
@@ -32,7 +32,7 @@ namespace explicitConstraints {
3232

3333
// Explicit Constraints of 'unknown'
3434
namespace explicitConstraintsOfUnknown {
35-
export function keyLengthsEqualUsingEmptyObjectFn<T>(a: T, b: T): [T, T] | undefined {
35+
export function keyLengthsEqualUsingEmptyObjectFn<T extends unknown>(a: T, b: T): [T, T] | undefined {
3636
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
3737
return undefined;
3838
}
@@ -45,14 +45,14 @@ namespace explicitConstraintsOfUnknown {
4545
return undefined;
4646
}
4747

48-
export function keyLengthsEqualUsingNonPrimitiveFn<T>(a: T, b: T): [T, T] | undefined {
48+
export function keyLengthsEqualUsingNonPrimitiveFn<T extends unknown>(a: T, b: T): [T, T] | undefined {
4949
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
5050
return undefined;
5151
}
5252
if (Array.isArray(a) || Array.isArray(b)) {
5353
return undefined;
5454
}
55-
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
55+
if (keysOfNonPrimitive(a).length !== keysOfNonPrimitive(b).length) {
5656
return [a, b];
5757
}
5858
return undefined;
@@ -61,8 +61,8 @@ namespace explicitConstraintsOfUnknown {
6161

6262

6363
//// [contextualNarrowingFromUnknownToObjects.js]
64-
var explicitConstraints;
65-
(function (explicitConstraints) {
64+
var implicitConstraints;
65+
(function (implicitConstraints) {
6666
function keyLengthsEqualUsingEmptyObjectFn(a, b) {
6767
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
6868
return undefined;
@@ -75,21 +75,21 @@ var explicitConstraints;
7575
}
7676
return undefined;
7777
}
78-
explicitConstraints.keyLengthsEqualUsingEmptyObjectFn = keyLengthsEqualUsingEmptyObjectFn;
78+
implicitConstraints.keyLengthsEqualUsingEmptyObjectFn = keyLengthsEqualUsingEmptyObjectFn;
7979
function keyLengthsEqualUsingNonPrimitiveFn(a, b) {
8080
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
8181
return undefined;
8282
}
8383
if (Array.isArray(a) || Array.isArray(b)) {
8484
return undefined;
8585
}
86-
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
86+
if (keysOfNonPrimitive(a).length !== keysOfNonPrimitive(b).length) {
8787
return [a, b];
8888
}
8989
return undefined;
9090
}
91-
explicitConstraints.keyLengthsEqualUsingNonPrimitiveFn = keyLengthsEqualUsingNonPrimitiveFn;
92-
})(explicitConstraints || (explicitConstraints = {}));
91+
implicitConstraints.keyLengthsEqualUsingNonPrimitiveFn = keyLengthsEqualUsingNonPrimitiveFn;
92+
})(implicitConstraints || (implicitConstraints = {}));
9393
// Explicit Constraints of 'unknown'
9494
var explicitConstraintsOfUnknown;
9595
(function (explicitConstraintsOfUnknown) {
@@ -113,7 +113,7 @@ var explicitConstraintsOfUnknown;
113113
if (Array.isArray(a) || Array.isArray(b)) {
114114
return undefined;
115115
}
116-
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
116+
if (keysOfNonPrimitive(a).length !== keysOfNonPrimitive(b).length) {
117117
return [a, b];
118118
}
119119
return undefined;

tests/baselines/reference/contextualNarrowingFromUnknownToObjects(strictnullchecks=false).symbols

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ declare function keysOfNonPrimitive(o: object): string[];
77
>keysOfNonPrimitive : Symbol(keysOfNonPrimitive, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 52))
88
>o : Symbol(o, Decl(contextualNarrowingFromUnknownToObjects.ts, 1, 36))
99

10-
namespace explicitConstraints {
11-
>explicitConstraints : Symbol(explicitConstraints, Decl(contextualNarrowingFromUnknownToObjects.ts, 1, 57))
10+
namespace implicitConstraints {
11+
>implicitConstraints : Symbol(implicitConstraints, Decl(contextualNarrowingFromUnknownToObjects.ts, 1, 57))
1212

1313
export function keyLengthsEqualUsingEmptyObjectFn<T>(a: T, b: T): [T, T] | undefined {
1414
>keyLengthsEqualUsingEmptyObjectFn : Symbol(keyLengthsEqualUsingEmptyObjectFn, Decl(contextualNarrowingFromUnknownToObjects.ts, 3, 31))
@@ -92,13 +92,13 @@ namespace explicitConstraints {
9292
return undefined;
9393
>undefined : Symbol(undefined)
9494
}
95-
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
96-
>keysOfEmptyObject(a).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
97-
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
95+
if (keysOfNonPrimitive(a).length !== keysOfNonPrimitive(b).length) {
96+
>keysOfNonPrimitive(a).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
97+
>keysOfNonPrimitive : Symbol(keysOfNonPrimitive, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 52))
9898
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 58))
9999
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
100-
>keysOfEmptyObject(b).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
101-
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
100+
>keysOfNonPrimitive(b).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
101+
>keysOfNonPrimitive : Symbol(keysOfNonPrimitive, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 52))
102102
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 63))
103103
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
104104

@@ -115,21 +115,21 @@ namespace explicitConstraints {
115115
namespace explicitConstraintsOfUnknown {
116116
>explicitConstraintsOfUnknown : Symbol(explicitConstraintsOfUnknown, Decl(contextualNarrowingFromUnknownToObjects.ts, 29, 1))
117117

118-
export function keyLengthsEqualUsingEmptyObjectFn<T>(a: T, b: T): [T, T] | undefined {
118+
export function keyLengthsEqualUsingEmptyObjectFn<T extends unknown>(a: T, b: T): [T, T] | undefined {
119119
>keyLengthsEqualUsingEmptyObjectFn : Symbol(keyLengthsEqualUsingEmptyObjectFn, Decl(contextualNarrowingFromUnknownToObjects.ts, 32, 40))
120120
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 54))
121-
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 57))
121+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 73))
122122
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 54))
123-
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 62))
123+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 78))
124124
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 54))
125125
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 54))
126126
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 54))
127127

128128
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
129-
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 57))
130-
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 62))
131-
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 57))
132-
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 62))
129+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 73))
130+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 78))
131+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 73))
132+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 78))
133133

134134
return undefined;
135135
>undefined : Symbol(undefined)
@@ -138,48 +138,48 @@ namespace explicitConstraintsOfUnknown {
138138
>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
139139
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
140140
>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
141-
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 57))
141+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 73))
142142
>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
143143
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
144144
>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
145-
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 62))
145+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 78))
146146

147147
return undefined;
148148
>undefined : Symbol(undefined)
149149
}
150150
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
151151
>keysOfEmptyObject(a).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
152152
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
153-
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 57))
153+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 73))
154154
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
155155
>keysOfEmptyObject(b).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
156156
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
157-
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 62))
157+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 78))
158158
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
159159

160160
return [a, b];
161-
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 57))
162-
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 62))
161+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 73))
162+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 78))
163163
}
164164
return undefined;
165165
>undefined : Symbol(undefined)
166166
}
167167

168-
export function keyLengthsEqualUsingNonPrimitiveFn<T>(a: T, b: T): [T, T] | undefined {
168+
export function keyLengthsEqualUsingNonPrimitiveFn<T extends unknown>(a: T, b: T): [T, T] | undefined {
169169
>keyLengthsEqualUsingNonPrimitiveFn : Symbol(keyLengthsEqualUsingNonPrimitiveFn, Decl(contextualNarrowingFromUnknownToObjects.ts, 44, 5))
170170
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 55))
171-
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 58))
171+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 74))
172172
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 55))
173-
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 63))
173+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 79))
174174
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 55))
175175
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 55))
176176
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 55))
177177

178178
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
179-
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 58))
180-
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 63))
181-
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 58))
182-
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 63))
179+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 74))
180+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 79))
181+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 74))
182+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 79))
183183

184184
return undefined;
185185
>undefined : Symbol(undefined)
@@ -188,28 +188,28 @@ namespace explicitConstraintsOfUnknown {
188188
>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
189189
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
190190
>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
191-
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 58))
191+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 74))
192192
>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
193193
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
194194
>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
195-
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 63))
195+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 79))
196196

197197
return undefined;
198198
>undefined : Symbol(undefined)
199199
}
200-
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
201-
>keysOfEmptyObject(a).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
202-
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
203-
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 58))
200+
if (keysOfNonPrimitive(a).length !== keysOfNonPrimitive(b).length) {
201+
>keysOfNonPrimitive(a).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
202+
>keysOfNonPrimitive : Symbol(keysOfNonPrimitive, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 52))
203+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 74))
204204
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
205-
>keysOfEmptyObject(b).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
206-
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
207-
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 63))
205+
>keysOfNonPrimitive(b).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
206+
>keysOfNonPrimitive : Symbol(keysOfNonPrimitive, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 52))
207+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 79))
208208
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
209209

210210
return [a, b];
211-
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 58))
212-
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 63))
211+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 74))
212+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 79))
213213
}
214214
return undefined;
215215
>undefined : Symbol(undefined)

0 commit comments

Comments
 (0)