microsoft / microsoft/TypeScript
TS2590 for simple ternary expression with large discriminated union
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Go
- Star
- 111k
- Fork
- 14.4k
- Merge trung bình
- 1 ngày 19 giờ
- Pull request đã merge (30 ngày)
- 117
Mô tả
🔎 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.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu với bản tái hiện được liên kết trong TypeScript Playground và so sánh hành vi của nó giữa các phiên bản 3.3.3 và 3.5.1. Theo dõi hành vi của trình biên dịch đối với biểu thức ba ngôi và discriminated union lớn; được xem là hoàn tất khi bản tái hiện không còn báo cáo TS2590 mà không làm thoái lui hành vi kiểm tra kiểu liên quan.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- typescript
- Lĩnh vực
- compilers
- Loại issue
- Lỗi
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 25/100