Skip to content

Commit a8cc939

Browse files
committed
Update test file and baselines
1 parent 59ceddb commit a8cc939

File tree

5 files changed

+567
-39
lines changed

5 files changed

+567
-39
lines changed

src/compiler/checker.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15014,8 +15014,14 @@ namespace ts {
1501415014
assumeTrue = !assumeTrue;
1501515015
}
1501615016
const valueType = getTypeOfExpression(value);
15017-
if ((type.flags & TypeFlags.Unknown) && (operator === SyntaxKind.EqualsEqualsEqualsToken) && (valueType.flags & TypeFlags.Unit)) {
15018-
return assumeTrue ? valueType : type;
15017+
if ((type.flags & TypeFlags.Unknown) && (operator === SyntaxKind.EqualsEqualsEqualsToken) && assumeTrue) {
15018+
if (valueType.flags & (TypeFlags.Primitive | TypeFlags.NonPrimitive)) {
15019+
return valueType;
15020+
}
15021+
if (valueType.flags & TypeFlags.Object) {
15022+
return nonPrimitiveType;
15023+
}
15024+
return type;
1501915025
}
1502015026
if (valueType.flags & TypeFlags.Nullable) {
1502115027
if (!strictNullChecks) {

tests/baselines/reference/unknownType2.js

Lines changed: 115 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ if (u === 5) {
1313
const y = u.toString(10);
1414
}
1515

16-
if (u === true || u === false) {
16+
if (u === true || u === false) {
1717
const someBool: boolean = u;
1818
}
1919

@@ -25,28 +25,93 @@ if (u === null) {
2525
const someNull: null = u;
2626
}
2727

28-
if(u === symb) {
28+
if (u === symb) {
2929
const symbolAlias: typeof symb = u;
3030
}
3131

3232
if (!(u === 42)) {
33-
u // u should still be `unknown` here
33+
type A = isTrue<isUnknown<typeof u>>
3434
}
3535

3636
if (u !== 42) {
37-
type A = isTrue<isUnknown<typeof u>>
37+
type B = isTrue<isUnknown<typeof u>>
3838
}
3939

4040
if (u == 42) {
41-
type B = isTrue<isUnknown<typeof u>>
41+
type C = isTrue<isUnknown<typeof u>>
4242
}
4343

4444
if (u == true) {
45-
type C = isTrue<isUnknown<typeof u>>
45+
type D = isTrue<isUnknown<typeof u>>
4646
}
4747

4848
if (u == Object) {
49-
type D = isTrue<isUnknown<typeof u>>
49+
type E = isTrue<isUnknown<typeof u>>
50+
}
51+
52+
declare const aString: string;
53+
declare const aBoolean: boolean;
54+
declare const aNumber: number;
55+
declare const anObject: object;
56+
declare const anObjectLiteral: { x: number };
57+
declare const aUnion: { x: number } | { y: string };
58+
declare const anIntersection: { x: number } & { y: string };
59+
declare const aFunction: () => number;
60+
61+
if (u === aString) {
62+
let uString: string = u;
63+
}
64+
65+
if (u === aBoolean) {
66+
let uString: boolean = u;
67+
}
68+
69+
if (u === aNumber) {
70+
let uNumber: number = u;
71+
}
72+
73+
if (u === anObject) {
74+
let uObject: object = u;
75+
}
76+
77+
if (u === anObjectLiteral) {
78+
let uObjectLiteral: object = u;
79+
}
80+
81+
if (u === aUnion) {
82+
type unionDoesNotNarrow = isTrue<isUnknown<typeof u>>
83+
}
84+
85+
if (u === anIntersection) {
86+
type intersectionDoesNotNarrow = isTrue<isUnknown<typeof u>>
87+
}
88+
89+
if (u === aFunction) {
90+
let uFunction: object = u;
91+
}
92+
93+
enum NumberEnum {
94+
A,
95+
B,
96+
C
97+
}
98+
99+
enum StringEnum {
100+
A = "A",
101+
B = "B",
102+
C = "C"
103+
}
104+
105+
if (u === NumberEnum || u === StringEnum) {
106+
let enumObj: object = u;
107+
}
108+
109+
if(u === NumberEnum.A) {
110+
let a: NumberEnum.A = u
111+
}
112+
113+
if(u === StringEnum.B) {
114+
let b: StringEnum.B = u
50115
}
51116

52117

@@ -70,7 +135,6 @@ if (u === symb) {
70135
var symbolAlias = u;
71136
}
72137
if (!(u === 42)) {
73-
u; // u should still be `unknown` here
74138
}
75139
if (u !== 42) {
76140
}
@@ -80,3 +144,46 @@ if (u == true) {
80144
}
81145
if (u == Object) {
82146
}
147+
if (u === aString) {
148+
var uString = u;
149+
}
150+
if (u === aBoolean) {
151+
var uString = u;
152+
}
153+
if (u === aNumber) {
154+
var uNumber = u;
155+
}
156+
if (u === anObject) {
157+
var uObject = u;
158+
}
159+
if (u === anObjectLiteral) {
160+
var uObjectLiteral = u;
161+
}
162+
if (u === aUnion) {
163+
}
164+
if (u === anIntersection) {
165+
}
166+
if (u === aFunction) {
167+
var uFunction = u;
168+
}
169+
var NumberEnum;
170+
(function (NumberEnum) {
171+
NumberEnum[NumberEnum["A"] = 0] = "A";
172+
NumberEnum[NumberEnum["B"] = 1] = "B";
173+
NumberEnum[NumberEnum["C"] = 2] = "C";
174+
})(NumberEnum || (NumberEnum = {}));
175+
var StringEnum;
176+
(function (StringEnum) {
177+
StringEnum["A"] = "A";
178+
StringEnum["B"] = "B";
179+
StringEnum["C"] = "C";
180+
})(StringEnum || (StringEnum = {}));
181+
if (u === NumberEnum || u === StringEnum) {
182+
var enumObj = u;
183+
}
184+
if (u === NumberEnum.A) {
185+
var a = u;
186+
}
187+
if (u === StringEnum.B) {
188+
var b = u;
189+
}

0 commit comments

Comments
 (0)