The falsy part of any/unknown is any/unknown (#39529)
This commit is contained in:
parent
24832e8100
commit
dbab46c363
|
@ -18652,7 +18652,7 @@ namespace ts {
|
||||||
type.flags & TypeFlags.BigInt ? zeroBigIntType :
|
type.flags & TypeFlags.BigInt ? zeroBigIntType :
|
||||||
type === regularFalseType ||
|
type === regularFalseType ||
|
||||||
type === falseType ||
|
type === falseType ||
|
||||||
type.flags & (TypeFlags.Void | TypeFlags.Undefined | TypeFlags.Null) ||
|
type.flags & (TypeFlags.Void | TypeFlags.Undefined | TypeFlags.Null | TypeFlags.AnyOrUnknown) ||
|
||||||
type.flags & TypeFlags.StringLiteral && (<StringLiteralType>type).value === "" ||
|
type.flags & TypeFlags.StringLiteral && (<StringLiteralType>type).value === "" ||
|
||||||
type.flags & TypeFlags.NumberLiteral && (<NumberLiteralType>type).value === 0 ||
|
type.flags & TypeFlags.NumberLiteral && (<NumberLiteralType>type).value === 0 ||
|
||||||
type.flags & TypeFlags.BigIntLiteral && isZeroBigInt(<BigIntLiteralType>type) ? type :
|
type.flags & TypeFlags.BigIntLiteral && isZeroBigInt(<BigIntLiteralType>type) ? type :
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
//// [anyAndUnknownHaveFalsyComponents.ts]
|
||||||
|
declare let x1: any;
|
||||||
|
const y1 = x1 && 3;
|
||||||
|
|
||||||
|
// #39113
|
||||||
|
declare let isTreeHeader1: any;
|
||||||
|
function foo1() {
|
||||||
|
return {
|
||||||
|
display: "block",
|
||||||
|
...(isTreeHeader1 && {
|
||||||
|
display: "flex",
|
||||||
|
})
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
declare let x2: unknown;
|
||||||
|
const y2 = x2 && 3;
|
||||||
|
|
||||||
|
// #39113
|
||||||
|
declare let isTreeHeader2: unknown;
|
||||||
|
function foo2() {
|
||||||
|
return {
|
||||||
|
display: "block",
|
||||||
|
...(isTreeHeader1 && {
|
||||||
|
display: "flex",
|
||||||
|
})
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//// [anyAndUnknownHaveFalsyComponents.js]
|
||||||
|
var __assign = (this && this.__assign) || function () {
|
||||||
|
__assign = Object.assign || function(t) {
|
||||||
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||||
|
s = arguments[i];
|
||||||
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
||||||
|
t[p] = s[p];
|
||||||
|
}
|
||||||
|
return t;
|
||||||
|
};
|
||||||
|
return __assign.apply(this, arguments);
|
||||||
|
};
|
||||||
|
var y1 = x1 && 3;
|
||||||
|
function foo1() {
|
||||||
|
return __assign({ display: "block" }, (isTreeHeader1 && {
|
||||||
|
display: "flex"
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
var y2 = x2 && 3;
|
||||||
|
function foo2() {
|
||||||
|
return __assign({ display: "block" }, (isTreeHeader1 && {
|
||||||
|
display: "flex"
|
||||||
|
}));
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
=== tests/cases/compiler/anyAndUnknownHaveFalsyComponents.ts ===
|
||||||
|
declare let x1: any;
|
||||||
|
>x1 : Symbol(x1, Decl(anyAndUnknownHaveFalsyComponents.ts, 0, 11))
|
||||||
|
|
||||||
|
const y1 = x1 && 3;
|
||||||
|
>y1 : Symbol(y1, Decl(anyAndUnknownHaveFalsyComponents.ts, 1, 5))
|
||||||
|
>x1 : Symbol(x1, Decl(anyAndUnknownHaveFalsyComponents.ts, 0, 11))
|
||||||
|
|
||||||
|
// #39113
|
||||||
|
declare let isTreeHeader1: any;
|
||||||
|
>isTreeHeader1 : Symbol(isTreeHeader1, Decl(anyAndUnknownHaveFalsyComponents.ts, 4, 11))
|
||||||
|
|
||||||
|
function foo1() {
|
||||||
|
>foo1 : Symbol(foo1, Decl(anyAndUnknownHaveFalsyComponents.ts, 4, 31))
|
||||||
|
|
||||||
|
return {
|
||||||
|
display: "block",
|
||||||
|
>display : Symbol(display, Decl(anyAndUnknownHaveFalsyComponents.ts, 6, 10))
|
||||||
|
|
||||||
|
...(isTreeHeader1 && {
|
||||||
|
>isTreeHeader1 : Symbol(isTreeHeader1, Decl(anyAndUnknownHaveFalsyComponents.ts, 4, 11))
|
||||||
|
|
||||||
|
display: "flex",
|
||||||
|
>display : Symbol(display, Decl(anyAndUnknownHaveFalsyComponents.ts, 8, 26))
|
||||||
|
|
||||||
|
})
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
declare let x2: unknown;
|
||||||
|
>x2 : Symbol(x2, Decl(anyAndUnknownHaveFalsyComponents.ts, 14, 11))
|
||||||
|
|
||||||
|
const y2 = x2 && 3;
|
||||||
|
>y2 : Symbol(y2, Decl(anyAndUnknownHaveFalsyComponents.ts, 15, 5))
|
||||||
|
>x2 : Symbol(x2, Decl(anyAndUnknownHaveFalsyComponents.ts, 14, 11))
|
||||||
|
|
||||||
|
// #39113
|
||||||
|
declare let isTreeHeader2: unknown;
|
||||||
|
>isTreeHeader2 : Symbol(isTreeHeader2, Decl(anyAndUnknownHaveFalsyComponents.ts, 18, 11))
|
||||||
|
|
||||||
|
function foo2() {
|
||||||
|
>foo2 : Symbol(foo2, Decl(anyAndUnknownHaveFalsyComponents.ts, 18, 35))
|
||||||
|
|
||||||
|
return {
|
||||||
|
display: "block",
|
||||||
|
>display : Symbol(display, Decl(anyAndUnknownHaveFalsyComponents.ts, 20, 10))
|
||||||
|
|
||||||
|
...(isTreeHeader1 && {
|
||||||
|
>isTreeHeader1 : Symbol(isTreeHeader1, Decl(anyAndUnknownHaveFalsyComponents.ts, 4, 11))
|
||||||
|
|
||||||
|
display: "flex",
|
||||||
|
>display : Symbol(display, Decl(anyAndUnknownHaveFalsyComponents.ts, 22, 26))
|
||||||
|
|
||||||
|
})
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
=== tests/cases/compiler/anyAndUnknownHaveFalsyComponents.ts ===
|
||||||
|
declare let x1: any;
|
||||||
|
>x1 : any
|
||||||
|
|
||||||
|
const y1 = x1 && 3;
|
||||||
|
>y1 : any
|
||||||
|
>x1 && 3 : any
|
||||||
|
>x1 : any
|
||||||
|
>3 : 3
|
||||||
|
|
||||||
|
// #39113
|
||||||
|
declare let isTreeHeader1: any;
|
||||||
|
>isTreeHeader1 : any
|
||||||
|
|
||||||
|
function foo1() {
|
||||||
|
>foo1 : () => any
|
||||||
|
|
||||||
|
return {
|
||||||
|
>{ display: "block", ...(isTreeHeader1 && { display: "flex", }) } : any
|
||||||
|
|
||||||
|
display: "block",
|
||||||
|
>display : string
|
||||||
|
>"block" : "block"
|
||||||
|
|
||||||
|
...(isTreeHeader1 && {
|
||||||
|
>(isTreeHeader1 && { display: "flex", }) : any
|
||||||
|
>isTreeHeader1 && { display: "flex", } : any
|
||||||
|
>isTreeHeader1 : any
|
||||||
|
>{ display: "flex", } : { display: string; }
|
||||||
|
|
||||||
|
display: "flex",
|
||||||
|
>display : string
|
||||||
|
>"flex" : "flex"
|
||||||
|
|
||||||
|
})
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
declare let x2: unknown;
|
||||||
|
>x2 : unknown
|
||||||
|
|
||||||
|
const y2 = x2 && 3;
|
||||||
|
>y2 : unknown
|
||||||
|
>x2 && 3 : unknown
|
||||||
|
>x2 : unknown
|
||||||
|
>3 : 3
|
||||||
|
|
||||||
|
// #39113
|
||||||
|
declare let isTreeHeader2: unknown;
|
||||||
|
>isTreeHeader2 : unknown
|
||||||
|
|
||||||
|
function foo2() {
|
||||||
|
>foo2 : () => any
|
||||||
|
|
||||||
|
return {
|
||||||
|
>{ display: "block", ...(isTreeHeader1 && { display: "flex", }) } : any
|
||||||
|
|
||||||
|
display: "block",
|
||||||
|
>display : string
|
||||||
|
>"block" : "block"
|
||||||
|
|
||||||
|
...(isTreeHeader1 && {
|
||||||
|
>(isTreeHeader1 && { display: "flex", }) : any
|
||||||
|
>isTreeHeader1 && { display: "flex", } : any
|
||||||
|
>isTreeHeader1 : any
|
||||||
|
>{ display: "flex", } : { display: string; }
|
||||||
|
|
||||||
|
display: "flex",
|
||||||
|
>display : string
|
||||||
|
>"flex" : "flex"
|
||||||
|
|
||||||
|
})
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ export default class Operation {
|
||||||
>name : any
|
>name : any
|
||||||
|
|
||||||
if(innerResult && innerResult.length > 0) {
|
if(innerResult && innerResult.length > 0) {
|
||||||
>innerResult && innerResult.length > 0 : boolean
|
>innerResult && innerResult.length > 0 : any
|
||||||
>innerResult : any
|
>innerResult : any
|
||||||
>innerResult.length > 0 : boolean
|
>innerResult.length > 0 : boolean
|
||||||
>innerResult.length : any
|
>innerResult.length : any
|
||||||
|
|
|
@ -539,8 +539,8 @@ function f(dim, offsets, arr, acommon, centerAnchorLimit, g, has, lin) {
|
||||||
>titleRotation = (taTitleOrientation && taTitleOrientation == "away") ? 180 : 0 : 0 | 180
|
>titleRotation = (taTitleOrientation && taTitleOrientation == "away") ? 180 : 0 : 0 | 180
|
||||||
>titleRotation : number
|
>titleRotation : number
|
||||||
>(taTitleOrientation && taTitleOrientation == "away") ? 180 : 0 : 0 | 180
|
>(taTitleOrientation && taTitleOrientation == "away") ? 180 : 0 : 0 | 180
|
||||||
>(taTitleOrientation && taTitleOrientation == "away") : boolean
|
>(taTitleOrientation && taTitleOrientation == "away") : any
|
||||||
>taTitleOrientation && taTitleOrientation == "away" : boolean
|
>taTitleOrientation && taTitleOrientation == "away" : any
|
||||||
>taTitleOrientation : any
|
>taTitleOrientation : any
|
||||||
>taTitleOrientation == "away" : boolean
|
>taTitleOrientation == "away" : boolean
|
||||||
>taTitleOrientation : any
|
>taTitleOrientation : any
|
||||||
|
|
|
@ -31,7 +31,7 @@ function foo(x: unknown, b: boolean) {
|
||||||
>toString : () => string
|
>toString : () => string
|
||||||
}
|
}
|
||||||
if (x && typeof x === 'object') {
|
if (x && typeof x === 'object') {
|
||||||
>x && typeof x === 'object' : boolean
|
>x && typeof x === 'object' : unknown
|
||||||
>x : unknown
|
>x : unknown
|
||||||
>typeof x === 'object' : boolean
|
>typeof x === 'object' : boolean
|
||||||
>typeof x : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
|
>typeof x : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
|
||||||
|
@ -45,7 +45,7 @@ function foo(x: unknown, b: boolean) {
|
||||||
>toString : () => string
|
>toString : () => string
|
||||||
}
|
}
|
||||||
if (b && x && typeof x === 'object') {
|
if (b && x && typeof x === 'object') {
|
||||||
>b && x && typeof x === 'object' : boolean
|
>b && x && typeof x === 'object' : unknown
|
||||||
>b && x : unknown
|
>b && x : unknown
|
||||||
>b : boolean
|
>b : boolean
|
||||||
>x : unknown
|
>x : unknown
|
||||||
|
@ -61,8 +61,8 @@ function foo(x: unknown, b: boolean) {
|
||||||
>toString : () => string
|
>toString : () => string
|
||||||
}
|
}
|
||||||
if (x && b && typeof x === 'object') {
|
if (x && b && typeof x === 'object') {
|
||||||
>x && b && typeof x === 'object' : boolean
|
>x && b && typeof x === 'object' : unknown
|
||||||
>x && b : boolean
|
>x && b : unknown
|
||||||
>x : unknown
|
>x : unknown
|
||||||
>b : boolean
|
>b : boolean
|
||||||
>typeof x === 'object' : boolean
|
>typeof x === 'object' : boolean
|
||||||
|
@ -77,9 +77,9 @@ function foo(x: unknown, b: boolean) {
|
||||||
>toString : () => string
|
>toString : () => string
|
||||||
}
|
}
|
||||||
if (x && b && b && typeof x === 'object') {
|
if (x && b && b && typeof x === 'object') {
|
||||||
>x && b && b && typeof x === 'object' : boolean
|
>x && b && b && typeof x === 'object' : unknown
|
||||||
>x && b && b : boolean
|
>x && b && b : unknown
|
||||||
>x && b : boolean
|
>x && b : unknown
|
||||||
>x : unknown
|
>x : unknown
|
||||||
>b : boolean
|
>b : boolean
|
||||||
>b : true
|
>b : true
|
||||||
|
@ -95,9 +95,9 @@ function foo(x: unknown, b: boolean) {
|
||||||
>toString : () => string
|
>toString : () => string
|
||||||
}
|
}
|
||||||
if (b && b && x && b && b && typeof x === 'object') {
|
if (b && b && x && b && b && typeof x === 'object') {
|
||||||
>b && b && x && b && b && typeof x === 'object' : boolean
|
>b && b && x && b && b && typeof x === 'object' : unknown
|
||||||
>b && b && x && b && b : true
|
>b && b && x && b && b : unknown
|
||||||
>b && b && x && b : true
|
>b && b && x && b : unknown
|
||||||
>b && b && x : unknown
|
>b && b && x : unknown
|
||||||
>b && b : boolean
|
>b && b : boolean
|
||||||
>b : boolean
|
>b : boolean
|
||||||
|
@ -125,8 +125,8 @@ function f1(x: unknown): any {
|
||||||
>x : unknown
|
>x : unknown
|
||||||
|
|
||||||
return x && typeof x === 'object' && x.hasOwnProperty('x');
|
return x && typeof x === 'object' && x.hasOwnProperty('x');
|
||||||
>x && typeof x === 'object' && x.hasOwnProperty('x') : boolean
|
>x && typeof x === 'object' && x.hasOwnProperty('x') : unknown
|
||||||
>x && typeof x === 'object' : boolean
|
>x && typeof x === 'object' : unknown
|
||||||
>x : unknown
|
>x : unknown
|
||||||
>typeof x === 'object' : boolean
|
>typeof x === 'object' : boolean
|
||||||
>typeof x : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
|
>typeof x : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
|
||||||
|
|
29
tests/cases/compiler/anyAndUnknownHaveFalsyComponents.ts
Normal file
29
tests/cases/compiler/anyAndUnknownHaveFalsyComponents.ts
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
// @strictNullChecks: true
|
||||||
|
|
||||||
|
declare let x1: any;
|
||||||
|
const y1 = x1 && 3;
|
||||||
|
|
||||||
|
// #39113
|
||||||
|
declare let isTreeHeader1: any;
|
||||||
|
function foo1() {
|
||||||
|
return {
|
||||||
|
display: "block",
|
||||||
|
...(isTreeHeader1 && {
|
||||||
|
display: "flex",
|
||||||
|
})
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
declare let x2: unknown;
|
||||||
|
const y2 = x2 && 3;
|
||||||
|
|
||||||
|
// #39113
|
||||||
|
declare let isTreeHeader2: unknown;
|
||||||
|
function foo2() {
|
||||||
|
return {
|
||||||
|
display: "block",
|
||||||
|
...(isTreeHeader1 && {
|
||||||
|
display: "flex",
|
||||||
|
})
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue