microsoft / microsoft/TypeScript
TS2590 for simple ternary expression with large discriminated union
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.4k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 117
Description
🔎 Search Terms
TS2590 ternary conditional
🕗 Version & Regression Information
- This changed between versions 3.3.3 and 3.5.1
⏯ Playground Link
💻 Code
type Union = { d: "1" } | { d: "2" } | { d: "3" } | { d: "4" } | { d: "5" } | { d: "6" } | { d: "7" } | { d: "8" } | { d: "9" } | { d: "10" } | { d: "11" } | { d: "12" } | { d: "13" } | { d: "14" } | { d: "15" } | { d: "16" } | { d: "17" } | { d: "18" } | { d: "19" } | { d: "20" } | { d: "21" } | { d: "22" } | { d: "23" } | { d: "24" } | { d: "25" } | { d: "26" } | { d: "27" } | { d: "28" } | { d: "29" } | { d: "30" } | { d: "31" } | { d: "32" } | { d: "33" } | { d: "34" } | { d: "35" } | { d: "36" } | { d: "37" } | { d: "38" } | { d: "39" } | { d: "40" } | { d: "41" } | { d: "42" } | { d: "43" } | { d: "44" } | { d: "45" } | { d: "46" } | { d: "47" } | { d: "48" } | { d: "49" } | { d: "50" } | { d: "51" } | { d: "52" } | { d: "53" } | { d: "54" } | { d: "55" } | { d: "56" } | { d: "57" } | { d: "58" } | { d: "59" } | { d: "60" } | { d: "61" } | { d: "62" } | { d: "63" } | { d: "64" } | { d: "65" } | { d: "66" } | { d: "67" } | { d: "68" } | { d: "69" } | { d: "70" } | { d: "71" } | { d: "72" } | { d: "73" } | { d: "74" } | { d: "75" } | { d: "76" } | { d: "77" } | { d: "78" } | { d: "79" } | { d: "80" } | { d: "81" } | { d: "82" } | { d: "83" } | { d: "84" } | { d: "85" } | { d: "86" } | { d: "87" } | { d: "88" } | { d: "89" } | { d: "90" } | { d: "91" } | { d: "92" } | { d: "93" } | { d: "94" } | { d: "95" } | { d: "96" } | { d: "97" } | { d: "98" } | { d: "99" } | { d: "100" } | { d: "101" } | { d: "102" } | { d: "103" } | { d: "104" } | { d: "105" } | { d: "106" } | { d: "107" } | { d: "108" } | { d: "109" } | { d: "110" } | { d: "111" } | { d: "112" } | { d: "113" } | { d: "114" } | { d: "115" } | { d: "116" } | { d: "117" } | { d: "118" } | { d: "119" } | { d: "120" } | { d: "121" } | { d: "122" } | { d: "123" } | { d: "124" } | { d: "125" } | { d: "126" } | { d: "127" } | { d: "128" } | { d: "129" } | { d: "130" } | { d: "131" } | { d: "132" } | { d: "133" } | { d: "134" } | { d: "135" } | { d: "136" } | { d: "137" } | { d: "138" } | { d: "139" } | { d: "140" } | { d: "141" } | { d: "142" } | { d: "143" } | { d: "144" } | { d: "145" } | { d: "146" } | { d: "147" } | { d: "148" } | { d: "149" } | { d: "150" } | { d: "151" } | { d: "152" } | { d: "153" } | { d: "154" } | { d: "155" } | { d: "156" } | { d: "157" } | { d: "158" } | { d: "159" } | { d: "160" } | { d: "161" } | { d: "162" } | { d: "163" } | { d: "164" } | { d: "165" } | { d: "166" } | { d: "167" } | { d: "168" } | { d: "169" } | { d: "170" } | { d: "171" } | { d: "172" } | { d: "173" } | { d: "174" } | { d: "175" } | { d: "176" } | { d: "177" } | { d: "178" } | { d: "179" } | { d: "180" } | { d: "181" } | { d: "182" } | { d: "183" } | { d: "184" } | { d: "185" } | { d: "186" } | { d: "187" } | { d: "188" } | { d: "189" } | { d: "190" } | { d: "191" } | { d: "192" } | { d: "193" } | { d: "194" } | { d: "195" } | { d: "196" } | { d: "197" } | { d: "198" } | { d: "199" } | { d: "200" } | { d: "201" } | { d: "202" } | { d: "203" } | { d: "204" } | { d: "205" } | { d: "206" } | { d: "207" } | { d: "208" } | { d: "209" } | { d: "210" } | { d: "211" } | { d: "212" } | { d: "213" } | { d: "214" } | { d: "215" } | { d: "216" } | { d: "217" } | { d: "218" } | { d: "219" } | { d: "220" } | { d: "221" } | { d: "222" } | { d: "223" } | { d: "224" } | { d: "225" } | { d: "226" } | { d: "227" } | { d: "228" } | { d: "229" } | { d: "230" } | { d: "231" } | { d: "232" } | { d: "233" } | { d: "234" } | { d: "235" } | { d: "236" } | { d: "237" } | { d: "238" } | { d: "239" } | { d: "240" } | { d: "241" } | { d: "242" } | { d: "243" } | { d: "244" } | { d: "245" } | { d: "246" } | { d: "247" } | { d: "248" } | { d: "249" } | { d: "250" } | { d: "251" } | { d: "252" } | { d: "253" } | { d: "254" } | { d: "255" } | { d: "256" } | { d: "257" } | { d: "258" } | { d: "259" } | { d: "260" } | { d: "261" } | { d: "262" } | { d: "263" } | { d: "264" } | { d: "265" } | { d: "266" } | { d: "267" } | { d: "268" } | { d: "269" } | { d: "270" } | { d: "271" } | { d: "272" } | { d: "273" } | { d: "274" } | { d: "275" } | { d: "276" } | { d: "277" } | { d: "278" } | { d: "279" } | { d: "280" } | { d: "281" } | { d: "282" } | { d: "283" } | { d: "284" } | { d: "285" } | { d: "286" } | { d: "287" } | { d: "288" } | { d: "289" } | { d: "290" } | { d: "291" } | { d: "292" } | { d: "293" } | { d: "294" } | { d: "295" } | { d: "296" } | { d: "297" } | { d: "298" } | { d: "299" } | { d: "300" } | { d: "301" } | { d: "302" } | { d: "303" } | { d: "304" } | { d: "305" } | { d: "306" } | { d: "307" } | { d: "308" } | { d: "309" } | { d: "310" } | { d: "311" } | { d: "312" } | { d: "313" } | { d: "314" } | { d: "315" } | { d: "316" } | { d: "317" } | { d: "318" } | { d: "319" } | { d: "320" } | { d: "321" } | { d: "322" } | { d: "323" } | { d: "324" } | { d: "325" } | { d: "326" } | { d: "327" } | { d: "328" } | { d: "329" } | { d: "330" } | { d: "331" } | { d: "332" } | { d: "333" } | { d: "334" } | { d: "335" } | { d: "336" } | { d: "337" } | { d: "338" } | { d: "339" } | { d: "340" } | { d: "341" } | { d: "342" } | { d: "343" } | { d: "344" } | { d: "345" } | { d: "346" } | { d: "347" } | { d: "348" } | { d: "349" } | { d: "350" } | { d: "351" } | { d: "352" } | { d: "353" } | { d: "354" } | { d: "355" } | { d: "356" } | { d: "357" } | { d: "358" } | { d: "359" } | { d: "360" } | { d: "361" } | { d: "362" } | { d: "363" } | { d: "364" } | { d: "365" } | { d: "366" } | { d: "367" } | { d: "368" } | { d: "369" } | { d: "370" } | { d: "371" } | { d: "372" } | { d: "373" } | { d: "374" } | { d: "375" } | { d: "376" } | { d: "377" } | { d: "378" } | { d: "379" } | { d: "380" } | { d: "381" } | { d: "382" } | { d: "383" } | { d: "384" } | { d: "385" } | { d: "386" } | { d: "387" } | { d: "388" } | { d: "389" } | { d: "390" } | { d: "391" } | { d: "392" } | { d: "393" } | { d: "394" } | { d: "395" } | { d: "396" } | { d: "397" } | { d: "398" } | { d: "399" } | { d: "400" } | { d: "401" } | { d: "402" } | { d: "403" } | { d: "404" } | { d: "405" } | { d: "406" } | { d: "407" } | { d: "408" } | { d: "409" } | { d: "410" } | { d: "411" } | { d: "412" } | { d: "413" } | { d: "414" } | { d: "415" } | { d: "416" } | { d: "417" } | { d: "418" } | { d: "419" } | { d: "420" } | { d: "421" } | { d: "422" } | { d: "423" } | { d: "424" } | { d: "425" } | { d: "426" } | { d: "427" } | { d: "428" } | { d: "429" } | { d: "430" } | { d: "431" } | { d: "432" } | { d: "433" } | { d: "434" } | { d: "435" } | { d: "436" } | { d: "437" } | { d: "438" } | { d: "439" } | { d: "440" } | { d: "441" } | { d: "442" } | { d: "443" } | { d: "444" } | { d: "445" } | { d: "446" } | { d: "447" } | { d: "448" } | { d: "449" } | { d: "450" } | { d: "451" } | { d: "452" } | { d: "453" } | { d: "454" } | { d: "455" } | { d: "456" } | { d: "457" } | { d: "458" } | { d: "459" } | { d: "460" } | { d: "461" } | { d: "462" } | { d: "463" } | { d: "464" } | { d: "465" } | { d: "466" } | { d: "467" } | { d: "468" } | { d: "469" } | { d: "470" } | { d: "471" } | { d: "472" } | { d: "473" } | { d: "474" } | { d: "475" } | { d: "476" } | { d: "477" } | { d: "478" } | { d: "479" } | { d: "480" } | { d: "481" } | { d: "482" } | { d: "483" } | { d: "484" } | { d: "485" } | { d: "486" } | { d: "487" } | { d: "488" } | { d: "489" } | { d: "490" } | { d: "491" } | { d: "492" } | { d: "493" } | { d: "494" } | { d: "495" } | { d: "496" } | { d: "497" } | { d: "498" } | { d: "499" } | { d: "500" } | { d: "501" } | { d: "502" } | { d: "503" } | { d: "504" } | { d: "505" } | { d: "506" } | { d: "507" } | { d: "508" } | { d: "509" } | { d: "510" } | { d: "511" } | { d: "512" } | { d: "513" } | { d: "514" } | { d: "515" } | { d: "516" } | { d: "517" } | { d: "518" } | { d: "519" } | { d: "520" } | { d: "521" } | { d: "522" } | { d: "523" } | { d: "524" } | { d: "525" } | { d: "526" } | { d: "527" } | { d: "528" } | { d: "529" } | { d: "530" } | { d: "531" } | { d: "532" } | { d: "533" } | { d: "534" } | { d: "535" } | { d: "536" } | { d: "537" } | { d: "538" } | { d: "539" } | { d: "540" } | { d: "541" } | { d: "542" } | { d: "543" } | { d: "544" } | { d: "545" } | { d: "546" } | { d: "547" } | { d: "548" } | { d: "549" } | { d: "550" } | { d: "551" } | { d: "552" } | { d: "553" } | { d: "554" } | { d: "555" } | { d: "556" } | { d: "557" } | { d: "558" } | { d: "559" } | { d: "560" } | { d: "561" } | { d: "562" } | { d: "563" } | { d: "564" } | { d: "565" } | { d: "566" } | { d: "567" } | { d: "568" } | { d: "569" } | { d: "570" } | { d: "571" } | { d: "572" } | { d: "573" } | { d: "574" } | { d: "575" } | { d: "576" } | { d: "577" } | { d: "578" } | { d: "579" } | { d: "580" } | { d: "581" } | { d: "582" } | { d: "583" } | { d: "584" } | { d: "585" } | { d: "586" } | { d: "587" } | { d: "588" } | { d: "589" } | { d: "590" } | { d: "591" } | { d: "592" } | { d: "593" } | { d: "594" } | { d: "595" } | { d: "596" } | { d: "597" } | { d: "598" } | { d: "599" } | { d: "600" } | { d: "601" } | { d: "602" } | { d: "603" } | { d: "604" } | { d: "605" } | { d: "606" } | { d: "607" } | { d: "608" } | { d: "609" } | { d: "610" } | { d: "611" } | { d: "612" } | { d: "613" } | { d: "614" } | { d: "615" } | { d: "616" } | { d: "617" } | { d: "618" } | { d: "619" } | { d: "620" } | { d: "621" } | { d: "622" } | { d: "623" } | { d: "624" } | { d: "625" } | { d: "626" } | { d: "627" } | { d: "628" } | { d: "629" } | { d: "630" } | { d: "631" } | { d: "632" } | { d: "633" } | { d: "634" } | { d: "635" } | { d: "636" } | { d: "637" } | { d: "638" } | { d: "639" } | { d: "640" } | { d: "641" } | { d: "642" } | { d: "643" } | { d: "644" } | { d: "645" } | { d: "646" } | { d: "647" } | { d: "648" } | { d: "649" } | { d: "650" } | { d: "651" } | { d: "652" } | { d: "653" } | { d: "654" } | { d: "655" } | { d: "656" } | { d: "657" } | { d: "658" } | { d: "659" } | { d: "660" } | { d: "661" } | { d: "662" } | { d: "663" } | { d: "664" } | { d: "665" } | { d: "666" } | { d: "667" } | { d: "668" } | { d: "669" } | { d: "670" } | { d: "671" } | { d: "672" } | { d: "673" } | { d: "674" } | { d: "675" } | { d: "676" } | { d: "677" } | { d: "678" } | { d: "679" } | { d: "680" } | { d: "681" } | { d: "682" } | { d: "683" } | { d: "684" } | { d: "685" } | { d: "686" } | { d: "687" } | { d: "688" } | { d: "689" } | { d: "690" } | { d: "691" } | { d: "692" } | { d: "693" } | { d: "694" } | { d: "695" } | { d: "696" } | { d: "697" } | { d: "698" } | { d: "699" } | { d: "700" } | { d: "701" } | { d: "702" } | { d: "703" } | { d: "704" } | { d: "705" } | { d: "706" } | { d: "707" } | { d: "708" } | { d: "709" } | { d: "710" } | { d: "711" } | { d: "712" } | { d: "713" } | { d: "714" } | { d: "715" } | { d: "716" } | { d: "717" } | { d: "718" } | { d: "719" } | { d: "720" } | { d: "721" } | { d: "722" } | { d: "723" } | { d: "724" } | { d: "725" } | { d: "726" } | { d: "727" } | { d: "728" } | { d: "729" } | { d: "730" } | { d: "731" } | { d: "732" } | { d: "733" } | { d: "734" } | { d: "735" } | { d: "736" } | { d: "737" } | { d: "738" } | { d: "739" } | { d: "740" } | { d: "741" } | { d: "742" } | { d: "743" } | { d: "744" } | { d: "745" } | { d: "746" } | { d: "747" } | { d: "748" } | { d: "749" } | { d: "750" } | { d: "751" } | { d: "752" } | { d: "753" } | { d: "754" } | { d: "755" } | { d: "756" } | { d: "757" } | { d: "758" } | { d: "759" } | { d: "760" } | { d: "761" } | { d: "762" } | { d: "763" } | { d: "764" } | { d: "765" } | { d: "766" } | { d: "767" } | { d: "768" } | { d: "769" } | { d: "770" } | { d: "771" } | { d: "772" } | { d: "773" } | { d: "774" } | { d: "775" } | { d: "776" } | { d: "777" } | { d: "778" } | { d: "779" } | { d: "780" } | { d: "781" } | { d: "782" } | { d: "783" } | { d: "784" } | { d: "785" } | { d: "786" } | { d: "787" } | { d: "788" } | { d: "789" } | { d: "790" } | { d: "791" } | { d: "792" } | { d: "793" } | { d: "794" } | { d: "795" } | { d: "796" } | { d: "797" } | { d: "798" } | { d: "799" } | { d: "800" } | { d: "801" } | { d: "802" } | { d: "803" } | { d: "804" } | { d: "805" } | { d: "806" } | { d: "807" } | { d: "808" } | { d: "809" } | { d: "810" } | { d: "811" } | { d: "812" } | { d: "813" } | { d: "814" } | { d: "815" } | { d: "816" } | { d: "817" } | { d: "818" } | { d: "819" } | { d: "820" } | { d: "821" } | { d: "822" } | { d: "823" } | { d: "824" } | { d: "825" } | { d: "826" } | { d: "827" } | { d: "828" } | { d: "829" } | { d: "830" } | { d: "831" } | { d: "832" } | { d: "833" } | { d: "834" } | { d: "835" } | { d: "836" } | { d: "837" } | { d: "838" } | { d: "839" } | { d: "840" } | { d: "841" } | { d: "842" } | { d: "843" } | { d: "844" } | { d: "845" } | { d: "846" } | { d: "847" } | { d: "848" } | { d: "849" } | { d: "850" } | { d: "851" } | { d: "852" } | { d: "853" } | { d: "854" } | { d: "855" } | { d: "856" } | { d: "857" } | { d: "858" } | { d: "859" } | { d: "860" } | { d: "861" } | { d: "862" } | { d: "863" } | { d: "864" } | { d: "865" } | { d: "866" } | { d: "867" } | { d: "868" } | { d: "869" } | { d: "870" } | { d: "871" } | { d: "872" } | { d: "873" } | { d: "874" } | { d: "875" } | { d: "876" } | { d: "877" } | { d: "878" } | { d: "879" } | { d: "880" } | { d: "881" } | { d: "882" } | { d: "883" } | { d: "884" } | { d: "885" } | { d: "886" } | { d: "887" } | { d: "888" } | { d: "889" } | { d: "890" } | { d: "891" } | { d: "892" } | { d: "893" } | { d: "894" } | { d: "895" } | { d: "896" } | { d: "897" } | { d: "898" } | { d: "899" } | { d: "900" } | { d: "901" } | { d: "902" } | { d: "903" } | { d: "904" } | { d: "905" } | { d: "906" } | { d: "907" } | { d: "908" } | { d: "909" } | { d: "910" } | { d: "911" } | { d: "912" } | { d: "913" } | { d: "914" } | { d: "915" } | { d: "916" } | { d: "917" } | { d: "918" } | { d: "919" } | { d: "920" } | { d: "921" } | { d: "922" } | { d: "923" } | { d: "924" } | { d: "925" } | { d: "926" } | { d: "927" } | { d: "928" } | { d: "929" } | { d: "930" } | { d: "931" } | { d: "932" } | { d: "933" } | { d: "934" } | { d: "935" } | { d: "936" } | { d: "937" } | { d: "938" } | { d: "939" } | { d: "940" } | { d: "941" } | { d: "942" } | { d: "943" } | { d: "944" } | { d: "945" } | { d: "946" } | { d: "947" } | { d: "948" } | { d: "949" } | { d: "950" } | { d: "951" } | { d: "952" } | { d: "953" } | { d: "954" } | { d: "955" } | { d: "956" } | { d: "957" } | { d: "958" } | { d: "959" } | { d: "960" } | { d: "961" } | { d: "962" } | { d: "963" } | { d: "964" } | { d: "965" } | { d: "966" } | { d: "967" } | { d: "968" } | { d: "969" } | { d: "970" } | { d: "971" } | { d: "972" } | { d: "973" } | { d: "974" } | { d: "975" } | { d: "976" } | { d: "977" } | { d: "978" } | { d: "979" } | { d: "980" } | { d: "981" } | { d: "982" } | { d: "983" } | { d: "984" } | { d: "985" } | { d: "986" } | { d: "987" } | { d: "988" } | { d: "989" } | { d: "990" } | { d: "991" } | { d: "992" } | { d: "993" } | { d: "994" } | { d: "995" } | { d: "996" } | { d: "997" } | { d: "998" } | { d: "999" } | { d: "1000" } | { d: "1001" };
function foo(): Union {
return { d: "5" };
}
function bar(): Union | null {
return true ? { d: "5" } : null
}
const a = bar(); // okay
const b = true ? foo() : null;
🙁 Actual behavior
A ternary expression in the form of <arbitrary condition> ? <large discriminated union> : null produces a TS2590 (Expression produces a union type that is too complex to represent) error.
🙂 Expected behavior
The type of the expression should be inferred as Union | null.
Additional information about the issue
- This seems to work if the discriminated union has 1000 or fewer members.
- This also doesn't work when written as an if-else statement.
- In my actual code the discriminated union was created using conditional types from a union of the discriminant values, but as shown in the Playground link, it seems like this also doesn't work even if the union was defined as a literal.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par la reproduction liée dans TypeScript Playground et comparez son comportement entre les versions 3.3.3 et 3.5.1. Suivez le comportement du compilateur pour l’expression ternaire et la grande discriminated union ; le travail est terminé lorsque la reproduction ne signale plus TS2590 sans provoquer de régression dans le comportement de vérification de types associé.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 25/100