[{"data":1,"prerenderedAt":464},["ShallowReactive",2],{"project-32941613":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":42,"post_text":44,"what":45,"said":57,"maker_in_thread":140,"shape":146,"grid":150,"attempts":426,"same_week":427,"maker_shows":43,"maker_hidden":456,"reader_version":457,"card":458},"32941613","Ezno","A type checker for JavaScript and optimiser for React","title","Show HN: Ezno, a type checker for JavaScript and optimiser for React","https:\u002F\u002Fkaleidawave.github.io\u002Fposts\u002Fintroducing-ezno\u002F","kaleidawave.github.io","kaleidawave",1663865928,2022,175,98,344,2570,14,"notable","dev_tools","type checker","cli",[24,25,26,27],"typescript type checker","javascript type checker","react optimiser","type inference","mixed",0.148,{"positive":31,"neutral":32,"mixed":33,"critical":34},7,9,1,5,22,{"idea":37,"docs":38,"performance":41},{"positive":34,"critical":33},{"positive":39,"critical":40},0,3,{"positive":39,"critical":33},[34,39,39,33,34,39,39,39,39,39,39,39,39,39,40,43,39,39,39,39,39,39,39,39,34,40,39,40,33,39,39,39,39,39,39,34,34,40,40,43],2,null,{"problem":44,"audience":44,"pricing":44,"motivation":44,"time_to_build":44,"stack":46,"openness":55,"stage":56,"team_size":55},[47],{"value":48,"source":49,"evidence":50},"Rust","inferred",[51],{"id":52,"by":53,"text":54},"32953488","martpie","Rome (written in Rust) is trying to be a faster tsc (amongst other things, like a faster webpack, babel, prettier, etc) https:\u002F\u002Frome.tools\u002F#development-status","unknown","prototype",{"praise":58,"objections":75,"requests":87,"questions":99,"alternatives":111},[59,71],{"value":60,"source":61,"evidence":62},"Inferred generics and effect tracking are novel and impressive","commenter",[63,67],{"id":64,"by":65,"text":66},"32954023","brundolf","> One of the key ideas with Ezno is that it attempts \"maximum\" knowledge of a source I've been working on a new TypeScript-like language myself from scratch, which among other…",{"id":68,"by":69,"text":70},"32959245","bcherny","Wow, this is seriously impressive work, if it really works as well as the code examples make it seem. Many of these ideas I have not seen in other JS typecheckers: - Inferred…",{"value":72,"source":61,"evidence":73},"Using a typechecker to reduce React work is an interesting idea",[74],{"id":68,"by":69,"text":70},[76,83],{"value":77,"source":61,"evidence":78},"Not fully TypeScript-compatible; it is a mostly-compatible checker",[79],{"id":80,"by":81,"text":82},"32953986","madeofpalk","> Ezno's type checker is built from scratch. Getting the features I wanted requires a lot of different functionality and needed several new ideas that as far as I know aren't…",{"value":84,"source":61,"evidence":85},"Unclear whether JavaScript dynamism limits the checks",[86],{"id":64,"by":65,"text":66},[88,92],{"value":89,"source":61,"evidence":90},"Open source release",[91],{"id":68,"by":69,"text":70},{"value":93,"source":61,"evidence":94},"Runtime type checking generated from types",[95],{"id":96,"by":97,"text":98},"32954132","nilsbunger","What I'd really like is a tsc that creates code to check types at runtime, like for API boundaries and parsing unknown input. Kind of like a built-in Zod. Maybe it's just an…",[100,107],{"value":101,"source":61,"evidence":102},"How do I use this?",[103],{"id":104,"by":105,"text":106},"32958188","z3t4","So how do I use this ? I think 90% of JS types can be inferred statically...",{"value":108,"source":61,"evidence":109},"Will the approach work at scale?",[110],{"id":68,"by":69,"text":70},[112,122,126,133],{"value":113,"source":61,"evidence":114},"Hegel",[115,119],{"id":116,"by":117,"text":118},"32953657","fbn79","Remind me of Hegel (https:\u002F\u002Fhegel.js.org\u002F) but with typescript compatibility. It's a pity Hegel develompent stopped because war in Ukraine…",{"id":120,"by":11,"text":121},"32960997","Thank you. Just checked out the Bagel post (https:\u002F\u002Fwww.brandons.me\u002Fblog\u002Fthe-bagel-language) and it looks really cool. Identifying pure functions (whether that is by syntax…",{"value":123,"source":61,"evidence":124},"Rome",[125],{"id":52,"by":53,"text":54},{"value":127,"source":61,"evidence":128},"io-ts",[129],{"id":130,"by":131,"text":132},"32954818","wk_end","You can use io-ts [0] to define your types, and it'll generate functions to typecheck for you. Syntactically it's a bit gnarly and the documentation isn't great; a first-party…",{"value":134,"source":61,"evidence":135},"Zod",[136],{"id":137,"by":138,"text":139},"32954240","eagsalazar2","This x1000! Type guards are a joke and real runtime type checking could be so easy if they prioritized it. Yes you can use zod but then you have to define your types through zod…",{"comments":43,"answered":43,"key":141},[142,143],{"id":120,"text":121},{"id":144,"text":145},"32961079","No defiantly not an intention to render anything obsolete. I think React will be around for a while. Instead if you like stricter types, `.map`, and `.push` JSX and want to…",{"commenters":147,"max_depth":31,"maker_replies":43,"first_comment_mins":148,"lifespan_hours":149},70,1363,173,[151,153,157,161,163,167,169,171,175,178,180,183,185,188,191,194,197,200,203,206,209,212,215,218,222,225,228,231,234,237,240,243,246,248,250,253,255,259,261,264,266,268,271,272,275,278,282,283,285,287,289,292,294,296,299,302,304,306,308,311,314,316,319,322,325,327,331,333,337,339,343,348,349,353,356,359,362,364,367,369,372,375,378,380,382,385,389,393,395,397,400,404,407,411,415,416,420,424],[64,39,34,152,65,39],"project\u002Fpositive\u002Fidea",[154,39,40,155,156,39],"32955749","project\u002Fneutral\u002Fidea","julesnp",[158,39,39,159,160,39],"32956276","commenter\u002Fneutral\u002Fnone","the_duke",[162,39,39,159,131,39],"32957835",[164,39,39,165,166,39],"32958709","other\u002Fneutral\u002Fnone","fuzzythinker",[168,39,39,159,65,39],"32958968",[170,39,39,159,166,39],"32959031",[172,39,33,173,174,39],"32959941","project\u002Fcritical\u002Fidea","Too",[176,39,39,177,65,39],"32966125","commenter\u002Fneutral\u002Fidea",[120,39,39,179,11,33],"maker\u002Fpositive\u002Fidea",[181,39,34,152,182,39],"32961686","CapsAdmin",[184,39,40,155,65,39],"32966157",[186,33,39,165,187,39],"32956437","simplify",[189,33,39,165,190,39],"32956544","mhh__",[192,33,39,165,193,39],"32959193","zdragnar",[195,33,39,196,160,39],"32956575","other\u002Fcritical\u002Fdesign",[198,33,39,165,199,39],"32956787","enlyth",[201,33,39,165,202,39],"32957700","lioeters",[204,33,39,165,205,39],"32958030","math_dandy",[207,33,39,165,208,39],"32958361","tlrobinson",[210,33,39,196,211,39],"33027481","yencabulator",[213,33,39,165,214,39],"32958438","d3nj4l",[216,33,39,165,217,39],"32958947","zoom6628",[219,33,39,220,221,39],"32959621","other\u002Fneutral\u002Fdesign","cjonas",[223,33,39,165,224,39],"32960941","Smaug123",[226,33,39,220,227,39],"32969656","TDiblik",[229,33,39,220,230,39],"32960084","zarzavat",[232,33,39,220,233,39],"32960464","graftak",[235,33,39,165,236,39],"32960837","zozbot234",[238,33,39,220,239,39],"32957018","Tade0",[241,33,39,220,242,39],"32957221","staticassertion",[244,33,39,196,245,39],"32957543","alpaca128",[247,33,39,220,239,39],"32960780",[249,33,39,220,242,39],"32962365",[251,33,39,220,252,39],"32958606","mhermher",[80,43,40,254,81,39],"project\u002Fneutral\u002Fnone",[256,43,40,257,258,39],"32954019","project\u002Fneutral\u002Fdocs","anamexis",[260,43,40,257,81,39],"32954057",[262,43,33,263,211,39],"33027494","project\u002Fcritical\u002Fdocs",[96,40,39,265,97,39],"other\u002Fneutral\u002Fidea",[267,40,39,265,65,39],"32954205",[269,40,39,165,270,39],"32954484","hutzlibu",[137,40,39,265,138,39],[273,40,39,165,274,39],"32959339","jitl",[276,40,39,165,277,39],"32954605","phpnode",[279,40,39,280,281,39],"32958547","other\u002Fpositive\u002Fnone","underwater",[130,40,39,165,131,39],[284,40,39,220,252,39],"32955218",[286,40,39,165,131,39],"32955649",[288,40,39,165,252,39],"32956850",[290,40,39,220,291,39],"32955659","eyelidlessness",[293,40,39,220,252,39],"32956833",[295,40,39,220,291,39],"32958009",[297,40,39,165,298,39],"32955185","afavour",[300,40,39,165,301,39],"32955579","dtech",[303,40,39,220,252,39],"32955199",[305,40,39,165,81,39],"32955885",[307,40,39,165,252,39],"32956790",[309,40,39,220,310,39],"32958021","davidzweig",[312,40,39,165,313,39],"32958189","psnehanshu",[68,315,34,152,69,39],4,[317,34,40,254,318,39],"32953658","bin_bash",[320,34,39,159,321,39],"32953909","barnabask",[323,34,39,159,324,39],"32954115","user3939382",[326,34,39,159,313,39],"32958196",[328,329,39,165,330,39],"32954060",6,"immigrantheart",[116,31,40,332,117,39],"project\u002Fmixed\u002Fidea",[334,31,39,335,336,39],"32953883","commenter\u002Fneutral\u002Fdocs","Vinnl",[338,31,39,159,117,39],"32957029",[340,31,33,341,342,39],"32961174","project\u002Fcritical\u002Fperformance","lacasito25",[344,345,39,346,347,39],"32953443",8,"other\u002Fneutral\u002Fperformance","juancampa",[52,345,39,165,53,39],[350,345,39,351,352,39],"32954210","other\u002Fcritical\u002Fnone","e1g",[354,345,39,165,355,39],"32954331","jquery_dev",[357,345,39,165,358,39],"32956773","lazlo_kovacs",[360,345,39,165,361,39],"32954432","dsmmcken",[363,345,39,351,352,39],"32954661",[365,345,39,165,366,39],"32955222","pohl",[368,345,39,351,358,39],"32956668",[370,345,39,165,371,39],"32955360","ricardobeat",[373,345,39,165,374,39],"32953526","kidfiji",[376,345,39,346,377,39],"32953535","zamalek",[379,345,39,165,313,39],"32958203",[381,345,39,165,336,39],"32953809",[383,345,39,346,384,39],"32956759","WorldMaker",[386,32,34,387,388,39],"32955568","project\u002Fpositive\u002Fnone","mrpf1ster",[390,391,40,155,392,39],"32954564",10,"bryzaguy",[394,391,34,152,291,39],"32955720",[144,391,39,396,11,33],"maker\u002Fneutral\u002Fidea",[398,391,34,152,399,39],"32967496","AmalgatedAmoeba",[401,402,39,165,403,39],"32958109",11,"zer0zzz",[405,402,39,159,406,39],"32960534","gorbypark",[408,409,40,254,410,39],"32961066",12,"ghasemi",[412,413,39,265,414,39],"32959006",13,"shanghaikid",[104,18,40,257,105,39],[417,418,34,387,419,39],"32953731",15,"nexxel",[421,422,33,263,423,39],"32957710",16,"pwdisswordfish9",[425,422,33,263,423,39],"32975874",[],[428,433,438,442,446,451],{"id":429,"name":430,"points":431,"category":432},"32993130","Quazel",787,"learning_science",{"id":434,"name":435,"points":436,"category":437},"32943224","Open Prompts",279,"data",{"id":439,"name":440,"points":441,"category":20},"32939407","Dub",255,{"id":443,"name":444,"points":445,"category":20},"32935506","Rocketry",168,{"id":447,"name":448,"points":449,"category":450},"32976832","muted.io guitar chords",157,"languages",{"id":452,"name":453,"points":454,"category":455},"32962524","Jot",146,"productivity",false,"v2",{"id":459,"name":5,"line":6,"ai":456,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":460,"top":18,"kw":461,"maker":11,"domain":10,"tier":19,"attempts":39,"strip":462,"url":9,"mix":463,"praise":60,"objection":77,"sub":21},32941613,0.15,[24,25,26,27],"5001500000000032000000005303100000055332",[31,32,33,34],1794036625403]