CINXE.COM

Latest stories published on Flow – Medium

<!DOCTYPE html><html xmlns:cc="http://creativecommons.org/ns#"><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# medium-com: http://ogp.me/ns/fb/medium-com#"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=contain"><title>Latest stories published on Flow – Medium</title><link rel="canonical" href="https://medium.com/flow-type/latest"><meta name="robots" content="index,follow"><meta name="title" content="Latest stories published on Flow – Medium"><meta name="referrer" content="unsafe-url"><meta name="description" content="Read the latest stories published by Flow. The official publication for the Flow static type checker for JavaScript. Code faster. Code smarter. Code confidently."><meta name="keywords" content="JAVASCRIPT, FLOW, REACT, PROGRAMMING, PROGRAMMING LANGUAGES"><meta name="theme-color" content="#000000"><meta property="og:title" content="Latest stories published on Flow – Medium"><meta property="twitter:title" content="Latest stories published on Flow – Medium"><meta property="og:url" content="https://medium.com/flow-type/latest"><meta property="og:image" content="https://cdn-images-1.medium.com/max/1200/1*mlCLV-3rGy-pLbUsMYEGoA.png"><meta property="fb:app_id" content="542599432471018"><meta property="og:description" content="Read the latest stories published by Flow. The official publication for the Flow static type checker for JavaScript. Code faster. Code smarter. Code confidently."><meta name="twitter:description" content="Read the latest stories published by Flow. The official publication for the Flow static type checker for JavaScript. Code faster. Code smarter. Code confidently."><meta name="twitter:image:src" content="https://cdn-images-1.medium.com/max/1200/1*mlCLV-3rGy-pLbUsMYEGoA.png"><meta property="og:type" content="medium-com:collection"><meta name="twitter:card" content="summary_large_image"><meta property="medium-com:creator" content="https://medium.com/@jordanbrown215"><meta name="twitter:site" content="@Medium"><meta property="og:site_name" content="Medium"><meta name="twitter:app:name:iphone" content="Medium"><meta name="twitter:app:id:iphone" content="828256236"><meta name="twitter:app:url:iphone" content="medium://flow-type"><meta property="al:ios:app_name" content="Medium"><meta property="al:ios:app_store_id" content="828256236"><meta property="al:android:package" content="com.medium.reader"><meta property="al:android:app_name" content="Medium"><meta property="al:ios:url" content="medium://flow-type"><meta property="al:android:url" content="medium://flow-type"><meta property="al:web:url" content="https://medium.com/flow-type/latest"><link rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml" /><link rel="alternate" href="android-app://com.medium.reader/https/medium.com/flow-type" /><link rel="stylesheet" href="https://cdn-static-1.medium.com/_/fp/css/main-branding-base.tWIMt8r3Nl52PPi9OfgcVw.12.css"><script>!function(n,e){var t,o,i,c=[],f={passive:!0,capture:!0},r=new Date,a="pointerup",u="pointercancel";function p(n,c){t||(t=c,o=n,i=new Date,w(e),s())}function s(){o>=0&&o<i-r&&(c.forEach(function(n){n(o,t)}),c=[])}function l(t){if(t.cancelable){var o=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,o){function i(){p(t,o),r()}function c(){r()}function r(){e(a,i,f),e(u,c,f)}n(a,i,f),n(u,c,f)}(o,t):p(o,t)}}function w(n){["click","mousedown","keydown","touchstart","pointerdown"].forEach(function(e){n(e,l,f)})}w(n),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(n){c.push(n),s()}}(addEventListener,removeEventListener);</script><script>document.domain = document.domain;</script><script>if (window.top !== window.self) window.location = 'about:blank';var OB_startTime = new Date().getTime(); var OB_loadErrors = []; function _onerror(e) { OB_loadErrors.push(e) }; if (document.addEventListener) document.addEventListener("error", _onerror, true); else if (document.attachEvent) document.attachEvent("onerror", _onerror); function _asyncScript(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("script"); s.type = "text/javascript"; s.async = true; s.src = u; f.parentNode.insertBefore(s, f);}function _asyncStyles(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("link"); s.rel = "stylesheet"; s.href = u; f.parentNode.insertBefore(s, f); return s}(new Image()).src = "/_/stat?event=pixel.load&origin=" + encodeURIComponent(location.origin);</script><script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date; ga("create", "G-7JY7T788PK", "auto", {"allowLinker": true, "legacyCookieDomain": window.location.hostname});ga("send", "pageview");</script><script async src="https://www.google-analytics.com/analytics.js"></script><script>(function () {var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; document.write("<style>section.section-image--fullBleed.is-backgrounded {padding-top: " + Math.round(1.1 * height) + "px;}section.section-image--fullScreen.is-backgrounded, section.section-image--coverFade.is-backgrounded {min-height: " + height + "px; padding-top: " + Math.round(0.5 * height) + "px;}.u-height100vh {height: " + height + "px !important;}.u-height110vh {height: " + Math.round(1.1 * height) + "px !important;}.u-minHeight100vh {min-height: " + height + "px !important;}.u-maxHeight100vh {max-height: " + height + "px !important;}section.section-image--coverFade {height: " + height + "px;}.section-aspectRatioViewportPlaceholder, .section-aspectRatioViewportCropPlaceholder {max-height: " + height + "px;}.section-aspectRatioViewportBottomSpacer, .section-aspectRatioViewportBottomPlaceholder {max-height: " + Math.round(0.5 * height) + "px;}.zoomable:before {top: " + (-1 * height) + "px; left: " + (-1 * width) + "px; padding: " + height + "px " + width + "px;}</style>");})()</script><!--[if lt IE 9]><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js"></script><![endif]--><link rel="icon" href="https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19" class="js-favicon"><link rel="apple-touch-icon" sizes="152x152" href="https://cdn-images-1.medium.com/fit/c/304/304/1*mlCLV-3rGy-pLbUsMYEGoA.png"><link rel="apple-touch-icon" sizes="120x120" href="https://cdn-images-1.medium.com/fit/c/240/240/1*mlCLV-3rGy-pLbUsMYEGoA.png"><link rel="apple-touch-icon" sizes="76x76" href="https://cdn-images-1.medium.com/fit/c/152/152/1*mlCLV-3rGy-pLbUsMYEGoA.png"><link rel="apple-touch-icon" sizes="60x60" href="https://cdn-images-1.medium.com/fit/c/120/120/1*mlCLV-3rGy-pLbUsMYEGoA.png"><link rel="mask-icon" href="https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg" color="#171717"></head><body itemscope class=" browser-ie os-windows v-unbound v-glyph v-glyph--m2-unbound-source-serif-pro is-noJs"><script>document.body.className = document.body.className.replace(/(^|\s)is-noJs(\s|$)/, "$1is-js$2")</script><div class="site-main" id="container"><div class="butterBar butterBar--error"></div><div class="surface"><div id="prerendered" class="screenContent"><div class="metabar u-clearfix u-textColorTransparentWhiteDarker u-tintBgColor u-tintSpectrum js-metabar"><div class="branch-journeys-top"></div><div class="js-metabarMiddle metabar-inner u-marginAuto u-maxWidth1032 u-flexCenter u-justifyContentSpaceBetween u-height65 u-xs-height56 u-paddingHorizontal20"><div class="metabar-block u-flex1 u-flexCenter"><div class="js-metabarLogoLeft"><a href="https://medium.com/" data-log-event="home" class="siteNav-logo u-fillWhite u-flex0 u-flexCenter u-paddingTop0"><span class="svgIcon svgIcon--wordmarkMedium svgIcon--120x26px u-flex"><svg class="svgIcon-use" width="120" height="26" ><path d="M29.57 1.404l.036-.008V1.12h-7.27l-6.75 15.979-6.75-15.98H1.003v.278l.035.008c1.327.302 2 .752 2 2.374v18.993c0 1.623-.676 2.073-2.003 2.374L1 25.153v.279h5.315v-.278l-.035-.008c-1.327-.302-2-.751-2-2.374V4.88l8.67 20.552h.492l8.924-21.125V23.24c-.114 1.282-.782 1.677-1.983 1.95l-.036.009v.275h9.259V25.2l-.036-.008c-1.203-.274-1.886-.67-2-1.95l-.006-19.464h.006c0-1.622.674-2.072 2-2.374zm4.23 12.582c.15-3.412 1.367-5.875 3.41-5.918.629.01 1.157.219 1.568.62.872.852 1.282 2.634 1.219 5.298h-6.198zm-.092.962h10.85v-.046c-.03-2.61-.78-4.64-2.228-6.033-1.25-1.204-3.103-1.867-5.048-1.867h-.043c-1.01 0-2.248.246-3.13.693a7.316 7.316 0 00-2.623 2.086c-1.185 1.479-1.903 3.477-2.078 5.724a13.717 13.717 0 00-.04.755c-.004.195-.005.39-.001.587.117 5.087 2.846 9.153 7.692 9.153 4.254 0 6.73-3.132 7.348-7.336l-.312-.11c-1.085 2.259-3.034 3.628-5.252 3.461-3.028-.228-5.347-3.32-5.137-7.066m23.122 6.893c-.356.85-1.099 1.319-2.094 1.319-.995 0-1.905-.689-2.552-1.939-.694-1.342-1.06-3.24-1.06-5.487 0-4.678 1.445-7.704 3.68-7.704.937 0 1.674.468 2.026 1.284v12.527zm7.198 3.335c-1.327-.316-2-.787-2-2.492V0l-8.062 2.392v.293l.05-.004c1.111-.09 1.866.064 2.304.472.343.32.51.809.51 1.498v3.11C56.033 7.25 55.088 7 53.94 7c-2.326 0-4.453.987-5.986 2.779-1.599 1.867-2.444 4.42-2.444 7.38 0 5.287 2.584 8.84 6.43 8.84 2.25 0 4.06-1.242 4.888-3.336v2.811h7.233v-.29l-.035-.008zM70.94 3.085c0-1.65-1.236-2.896-2.875-2.896-1.632 0-2.908 1.272-2.908 2.896 0 1.624 1.278 2.896 2.908 2.896 1.64 0 2.875-1.245 2.875-2.896zm1.903 22.092c-1.327-.316-2-.787-2-2.492h-.006V7.055l-7.234 2.092v.284l.043.004c1.566.14 1.994.683 1.994 2.525v13.515h7.24v-.29l-.037-.008zm18.536 0c-1.327-.316-2-.787-2-2.492V7.055L82.49 9.078v.285l.04.004c1.28.136 1.65.71 1.65 2.56v9.88c-.426.85-1.227 1.356-2.196 1.39-1.573 0-2.439-1.07-2.439-3.012V7.055l-7.234 2.092v.284l.044.004c1.565.14 1.994.683 1.994 2.525v8.362a9.443 9.443 0 00.15 1.741l.13.57C75.243 24.845 76.848 26 79.362 26c2.129 0 3.996-1.328 4.818-3.405v2.885h7.233v-.291l-.034-.012zm28.102.298v-.291l-.035-.009c-1.44-.334-2.001-.964-2.001-2.248V12.295C117.445 8.98 115.597 7 112.5 7c-2.257 0-4.16 1.314-4.893 3.36-.582-2.168-2.257-3.36-4.734-3.36-2.175 0-3.88 1.156-4.612 3.11V7.056l-7.233 2.006v.286l.043.004c1.547.138 1.994.697 1.994 2.492v13.631h6.75v-.29l-.037-.01c-1.148-.271-1.519-.767-1.519-2.04V10.95c.304-.715.917-1.562 2.127-1.562 1.504 0 2.266 1.05 2.266 3.116v12.972h6.751v-.29l-.035-.01c-1.149-.271-1.52-.767-1.52-2.04V12.294a7.107 7.107 0 00-.095-1.21c.322-.777.97-1.696 2.23-1.696 1.524 0 2.265 1.02 2.265 3.116v12.972h7.233z"/></svg></span><span class="u-textScreenReader">Homepage</span></a></div><div class="u-paddingLeft10 u-sm-show r-paddingRight10"><a href="https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com/flow-type%3F~feature=LoMobileNavBar&~channel=ShowCollectionHome&~stage=m2">Open in app</a></div></div><div class="metabar-block u-flex0 u-flexCenter"><div class="u-flexCenter u-height65 u-xs-height56"><div class="buttonSet buttonSet--wide u-lineHeightInherit"><a class="button button--primary button--light button--chromeless u-accentColor--buttonNormal is-inSiteNavBar u-xs-hide js-signInButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fflow-type%2Flatest&amp;source=--------------------------nav_reg&amp;operation=login" data-action="sign-in-prompt" data-redirect="https://medium.com/flow-type/latest" data-action-source="--------------------------nav_reg">Sign in</a><a class="button button--primary button--light button--withChrome u-accentColor--buttonNormal is-inSiteNavBar js-signUpButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fflow-type%2Flatest&amp;source=--------------------------nav_reg&amp;operation=register" data-action="sign-up-prompt" data-redirect="https://medium.com/flow-type/latest" data-action-source="--------------------------nav_reg">Get started</a></div></div></div></div></div><div class="metabar metabar--spacer js-metabarSpacer u-tintBgColor u-height65 u-xs-height56"></div><div class="collectionHeader js-collectionHeaderContainer u-relative collectionHeader--layoutLarge collectionHeader--alignmentLeft collectionHeader--withLogo collectionHeader--withoutBackground collectionHeader--colorBehaviorBold collectionHeader--withoutNavigation collectionHeader--editorLayoutTitleAndLogo is-modeView u-tintBgColor"><div class="collectionHeader-aspectRatioTable"><div class="collectionHeader-aspectRatioContent u-backgroundSizeCover js-collectionHeaderBackground"><div class="collectionHeader-overlayBackground u-height100vh"></div><header class="collectionHeader-heroAndInlineNav u-borderBox u-maxWidth1072 u-paddingLeft20 u-paddingRight20 u-marginAuto u-foreground js-collectionHeader"><div class="collectionHeader-hero js-collectionHeaderHero u-clearfix u-tintSpectrum"><div class="collectionHeader-heroInner"><div class="collectionHeader-logo js-collectionHeaderLogo" style="max-width: 336px;"><a class="link u-baseColor--link" href="https://medium.com/flow-type" title="Go to Flow" aria-label="Go to Flow"><div class="u-relative u-marginAuto"><div style="padding-bottom: 41.666666666666664%"></div><img class="collectionHeader-logoImage js-collectionHeaderLogoImage" src="https://cdn-images-1.medium.com/max/672/1*wgxj1RRhhI9pi2M_pvd3Kw@2x.png" data-image-id="1*wgxj1RRhhI9pi2M_pvd3Kw@2x.png" data-width="1680" data-height="700" /></div></a></div><div class="collectionHeader-nameAndDescription"><h2 class="collectionHeader-description js-collectionDescription u-foreground u-baseColor--textNormal u-contentSansRegular u-fontSize24 u-xs-fontSize18">Code faster. Code smarter. Code confidently.</h2></div></div></div></header></div><div class="collectionHeader-aspectRatioCell"><div class="collectionHeader-aspectRatioFullWidth"></div></div></div><div class="collectionHeader-blockNav"><div class="u-borderBox u-maxWidth1072 u-paddingLeft20 u-paddingRight20 u-marginAuto"><nav class="collectionHeader-nav u-clearfix js-collectionHeaderNav u-lineHeight40 u-overflowHiddenY u-tintSpectrum"><div class="buttonSet u-flex1 u-noWrap u-overflowX u-paddingBottom100 u-xs-marginRight15"><label class="button button--small button--chromeless button--withIcon button--withSvgIcon inputGroup u-sm-hide metabar-predictiveSearch u-baseColor--buttonNormal u-baseColor--placeholderNormal" title="Search Flow"><span class="svgIcon svgIcon--search svgIcon--25px u-baseColor--iconLight"><svg class="svgIcon-use" width="25" height="25" ><path d="M20.067 18.933l-4.157-4.157a6 6 0 10-.884.884l4.157 4.157a.624.624 0 10.884-.884zM6.5 11c0-2.62 2.13-4.75 4.75-4.75S16 8.38 16 11s-2.13 4.75-4.75 4.75S6.5 13.62 6.5 11z"/></svg></span><input class="js-predictiveSearchInput textInput textInput--rounded textInput--darkText u-baseColor--textNormal textInput--transparent" type="search" placeholder="Search Flow" required="true" data-collection-id="ab067ae921ed" /></label><a class="button button--light button--chromeless is-touchIconBlackPulse u-baseColor--buttonLight button--withIcon button--withSvgIcon button--chromeless u-verticalAlignMiddle" href="https://twitter.com/flowtype" title="Visit “Flow” on X" aria-label="Visit “Flow” on X" rel="me" target="_blank"><span class="button-defaultState"><span class="svgIcon svgIcon--twitter svgIcon--25px"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M14.215 11.3l5.764-6.7h-1.366l-5.005 5.818L9.611 4.6H5l6.045 8.798L5 20.424h1.366l5.286-6.144 4.221 6.144h4.61L14.216 11.3zm-1.871 2.175l-.612-.876-4.874-6.97h2.098l3.933 5.625.613.876 5.112 7.312h-2.098l-4.172-5.966z" fill="#242424"/></svg></span></span></a></div><div class="buttonSet u-textAlignRight u-marginLeft18 u-flex0 u-noWrap"><button class="button button--primary button--smallest u-noUserSelect button--withChrome u-accentColor--buttonNormal js-relationshipButton is-smallPill" data-action="sign-up-prompt" data-sign-in-action="toggle-follow-collection" data-requires-token="true" data-redirect="https://medium.com/_/subscribe/collection/flow-type" data-action-source="pub_header----ab067ae921ed----------------------follow_pub" data-collection-id="ab067ae921ed"><span class="button-label js-buttonLabel">Follow</span></button></div></nav></div></div></div><div class="container u-maxWidth1040"><div class="row u-paddingTop20 u-paddingBottom10 u-xs-paddingTop0 js-postList"><div class="col u-xs-size12of12 u-size8of12"><nav class="u-flex heading heading--borderedBottom heading--paddedTop"><span class="u-minWidth0"><ul class="heading-tabs"><li class="heading-tabsItem u-inlineBlock js-tabsItem is-active u-fontSize16"><span class="heading-title u-inlineBlock u-fontSize16"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/latest">Latest</a></span></li><li class="heading-tabsItem u-inlineBlock js-tabsItem u-fontSize16"><span class="heading-title u-inlineBlock u-fontSize16"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/trending">Trending</a></span></li></ul></span></nav><div class="js-postListHandle"><div class="u-maxWidth600 js-postList" data-count="10"><div class="js-postListHandle"><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="75b883c80749" data-source="---------0"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@jordanbrown215" data-action="show-user-card" data-action-value="953cde5de02" data-action-type="hover" data-user-id="953cde5de02" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*vKNcrvCUYN_kVSkS." class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Jordan Brown"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@jordanbrown215?source=---------0" data-action="show-user-card" data-action-source="---------0" data-action-value="953cde5de02" data-action-type="hover" data-user-id="953cde5de02" dir="auto">Jordan Brown</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flow-type?source=---------0" data-action="show-collection-card" data-action-source="---------0" data-action-value="flow-type" data-action-type="hover">Flow</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flow-type/announcing-mapped-types-pick-omit-and-record-75b883c80749?source=---------0" data-action="open-post" data-action-value="https://medium.com/flow-type/announcing-mapped-types-pick-omit-and-record-75b883c80749?source=---------0" data-action-source="preview-listing" ><time datetime="2024-08-06T21:23:59.118Z">Aug 6, 2024</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="2 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/flow-type/announcing-mapped-types-pick-omit-and-record-75b883c80749?source=---------0" title="Latest stories published on Flow – Medium" aria-label="Latest stories published on Flow – Medium" data-action="open-post" data-action-source="---------0" data-action-value="https://medium.com/flow-type/announcing-mapped-types-pick-omit-and-record-75b883c80749?source=---------0" data-action-index="0" data-post-id="75b883c80749"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*2owqK37DhgF6nh6rgWvS1A.jpeg" data-width="4800" data-height="3200" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*2owqK37DhgF6nh6rgWvS1A.jpeg"></div></figure><h3 name="4b87" id="4b87" class="graf graf--h3 graf-after--figure graf--trailing graf--title">Announcing: Mapped Types + Pick, Omit, and Record</h3></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/announcing-mapped-types-pick-omit-and-record-75b883c80749?source=---------0" data-action="open-post" data-action-source="---------0" data-action-value="https://medium.com/flow-type/announcing-mapped-types-pick-omit-and-record-75b883c80749?source=---------0" data-post-id="75b883c80749">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="75b883c80749" data-is-flush-left="true" data-source="listing-----75b883c80749---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/75b883c80749" data-action-source="listing-----75b883c80749---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="75b883c80749">2</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="75b883c80749"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="b6c5285660d0" data-source="---------1"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@alexmckenley" data-action="show-user-card" data-action-value="ef334788334b" data-action-type="hover" data-user-id="ef334788334b" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*DPV4eX3sdJ2wH5Ew" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Alex Taylor"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@alexmckenley?source=---------1" data-action="show-user-card" data-action-source="---------1" data-action-value="ef334788334b" data-action-type="hover" data-user-id="ef334788334b" dir="auto">Alex Taylor</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flow-type?source=---------1" data-action="show-collection-card" data-action-source="---------1" data-action-value="flow-type" data-action-type="hover">Flow</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flow-type/announcing-component-syntax-b6c5285660d0?source=---------1" data-action="open-post" data-action-value="https://medium.com/flow-type/announcing-component-syntax-b6c5285660d0?source=---------1" data-action-source="preview-listing" ><time datetime="2024-04-03T19:30:24.428Z">Apr 3, 2024</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="7 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/flow-type/announcing-component-syntax-b6c5285660d0?source=---------1" title="Latest stories published on Flow – Medium" aria-label="Latest stories published on Flow – Medium" data-action="open-post" data-action-source="---------1" data-action-value="https://medium.com/flow-type/announcing-component-syntax-b6c5285660d0?source=---------1" data-action-index="1" data-post-id="b6c5285660d0"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*ofDWSeYHJ0mOxhOqA-XhgA.png" data-width="932" data-height="308" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*ofDWSeYHJ0mOxhOqA-XhgA.png"></div></figure><h3 name="e978" id="e978" class="graf graf--h3 graf-after--figure graf--title"><strong class="markup--strong markup--h3-strong">New Flow Language Features for React</strong></h3><h4 name="f74f" id="f74f" class="graf graf--h4 graf-after--h3 graf--trailing graf--subtitle"><em class="markup--em markup--h4-em">Write Safer and more Succinct React with Flow</em></h4></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/announcing-component-syntax-b6c5285660d0?source=---------1" data-action="open-post" data-action-source="---------1" data-action-value="https://medium.com/flow-type/announcing-component-syntax-b6c5285660d0?source=---------1" data-post-id="b6c5285660d0">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="b6c5285660d0" data-is-flush-left="true" data-source="listing-----b6c5285660d0---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/b6c5285660d0" data-action-source="listing-----b6c5285660d0---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="b6c5285660d0">373</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/announcing-component-syntax-b6c5285660d0?source=---------1#--responses" data-action-source="---------1">4 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="b6c5285660d0"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="b979bb2e78cf" data-source="---------2"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@panvekris" data-action="show-user-card" data-action-value="369e550db90e" data-action-type="hover" data-user-id="369e550db90e" dir="auto"><img src="https://cdn-images-1.medium.com/proxy/1*dmbNkD5D-u45r44go_cf0g.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Panagiotis Vekris"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@panvekris?source=---------2" data-action="show-user-card" data-action-source="---------2" data-action-value="369e550db90e" data-action-type="hover" data-user-id="369e550db90e" dir="auto">Panagiotis Vekris</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flow-type?source=---------2" data-action="show-collection-card" data-action-source="---------2" data-action-value="flow-type" data-action-type="hover">Flow</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flow-type/announcing-user-defined-type-guards-in-flow-b979bb2e78cf?source=---------2" data-action="open-post" data-action-value="https://medium.com/flow-type/announcing-user-defined-type-guards-in-flow-b979bb2e78cf?source=---------2" data-action-source="preview-listing" ><time datetime="2024-03-05T22:27:14.317Z">Mar 5, 2024</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/flow-type/announcing-user-defined-type-guards-in-flow-b979bb2e78cf?source=---------2" title="Latest stories published on Flow – Medium" aria-label="Latest stories published on Flow – Medium" data-action="open-post" data-action-source="---------2" data-action-value="https://medium.com/flow-type/announcing-user-defined-type-guards-in-flow-b979bb2e78cf?source=---------2" data-action-index="2" data-post-id="b979bb2e78cf"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="2430" id="2430" class="graf graf--figure graf--layoutConstrainedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked" style="max-width: 450.63829787234044px; max-height: 240px;"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 53.300000000000004%;"></div><img class="graf-image" data-image-id="1*dpF4Tf97ukK5wCUCeDbCbg.png" data-width="706" data-height="376" src="https://cdn-images-1.medium.com/max/901/1*dpF4Tf97ukK5wCUCeDbCbg.png"></div></figure><h3 name="2060" id="2060" class="graf graf--h3 graf-after--figure graf--title">Announcing User Defined Type Guards in Flow</h3><p name="49d2" id="49d2" class="graf graf--p graf-after--h3 graf--trailing">Flow now lets you define a function that encodes a type predicate over its…</p></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/announcing-user-defined-type-guards-in-flow-b979bb2e78cf?source=---------2" data-action="open-post" data-action-source="---------2" data-action-value="https://medium.com/flow-type/announcing-user-defined-type-guards-in-flow-b979bb2e78cf?source=---------2" data-post-id="b979bb2e78cf">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="b979bb2e78cf" data-is-flush-left="true" data-source="listing-----b979bb2e78cf---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/b979bb2e78cf" data-action-source="listing-----b979bb2e78cf---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="b979bb2e78cf"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="765b421f3a87" data-source="---------3"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@samzhou" data-action="show-user-card" data-action-value="b4c39a4d72c1" data-action-type="hover" data-user-id="b4c39a4d72c1" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*AII7r6X5PwPjNgPj" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Sam Zhou"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@samzhou?source=---------3" data-action="show-user-card" data-action-source="---------3" data-action-value="b4c39a4d72c1" data-action-type="hover" data-user-id="b4c39a4d72c1" dir="auto">Sam Zhou</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flow-type?source=---------3" data-action="show-collection-card" data-action-source="---------3" data-action-value="flow-type" data-action-type="hover">Flow</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flow-type/announcing-conditional-types-765b421f3a87?source=---------3" data-action="open-post" data-action-value="https://medium.com/flow-type/announcing-conditional-types-765b421f3a87?source=---------3" data-action-source="preview-listing" ><time datetime="2024-03-05T21:00:21.434Z">Mar 5, 2024</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/flow-type/announcing-conditional-types-765b421f3a87?source=---------3" title="Latest stories published on Flow – Medium" aria-label="Latest stories published on Flow – Medium" data-action="open-post" data-action-source="---------3" data-action-value="https://medium.com/flow-type/announcing-conditional-types-765b421f3a87?source=---------3" data-action-index="3" data-post-id="765b421f3a87"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="5af1" id="5af1" class="graf graf--figure graf--layoutConstrainedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked" style="max-width: 548px; max-height: 214px;"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 39.1%;"></div><img class="graf-image" data-image-id="1*kX5EhkWiLPiwmF3SSFTYKw.png" data-width="548" data-height="214" src="https://cdn-images-1.medium.com/max/1200/1*kX5EhkWiLPiwmF3SSFTYKw.png"></div></figure><h3 name="3ea4" id="3ea4" class="graf graf--h3 graf-after--figure graf--title">Announcing Conditional Types</h3><p name="1f91" id="1f91" class="graf graf--p graf-after--h3 graf--trailing"><span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://flow.org/en/docs/types/conditional/">Conditional types</span> allow you to choose between two different output types by inspecting an input type. The…</p></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/announcing-conditional-types-765b421f3a87?source=---------3" data-action="open-post" data-action-source="---------3" data-action-value="https://medium.com/flow-type/announcing-conditional-types-765b421f3a87?source=---------3" data-post-id="765b421f3a87">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="765b421f3a87" data-is-flush-left="true" data-source="listing-----765b421f3a87---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/765b421f3a87" data-action-source="listing-----765b421f3a87---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="765b421f3a87">10</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="765b421f3a87"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="3ef41567ff3e" data-source="---------4"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@gkz" data-action="show-user-card" data-action-value="95a4c0399e1f" data-action-type="hover" data-user-id="95a4c0399e1f" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*nFcMwZ15r7EnAmgTdOLXhA.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of George Zahariev"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@gkz?source=---------4" data-action="show-user-card" data-action-source="---------4" data-action-value="95a4c0399e1f" data-action-type="hover" data-user-id="95a4c0399e1f" dir="auto">George Zahariev</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flow-type?source=---------4" data-action="show-collection-card" data-action-source="---------4" data-action-value="flow-type" data-action-type="hover">Flow</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flow-type/new-type-casting-syntax-for-flow-as-3ef41567ff3e?source=---------4" data-action="open-post" data-action-value="https://medium.com/flow-type/new-type-casting-syntax-for-flow-as-3ef41567ff3e?source=---------4" data-action-source="preview-listing" ><time datetime="2024-02-06T19:35:06.704Z">Feb 6, 2024</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="2 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/flow-type/new-type-casting-syntax-for-flow-as-3ef41567ff3e?source=---------4" title="Latest stories published on Flow – Medium" aria-label="Latest stories published on Flow – Medium" data-action="open-post" data-action-source="---------4" data-action-value="https://medium.com/flow-type/new-type-casting-syntax-for-flow-as-3ef41567ff3e?source=---------4" data-action-index="4" data-post-id="3ef41567ff3e"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="95fe" id="95fe" class="graf graf--figure graf--layoutConstrainedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked" style="max-width: 322.5px; max-height: 240px;"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 74.4%;"></div><img class="graf-image" data-image-id="1*Qz7Vz1kppEptexmWxwn8ww.png" data-width="344" data-height="256" src="https://cdn-images-1.medium.com/max/645/1*Qz7Vz1kppEptexmWxwn8ww.png"></div></figure><h3 name="0239" id="0239" class="graf graf--h3 graf-after--figure graf--title">New type casting syntax for Flow: “as”</h3><p name="5b06" id="5b06" class="graf graf--p graf-after--h3 graf--trailing">To make it easier for new users to get started with <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://flow.org/en/docs/">Flow</span>, we’re updating our type casting…</p></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/new-type-casting-syntax-for-flow-as-3ef41567ff3e?source=---------4" data-action="open-post" data-action-source="---------4" data-action-value="https://medium.com/flow-type/new-type-casting-syntax-for-flow-as-3ef41567ff3e?source=---------4" data-post-id="3ef41567ff3e">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="3ef41567ff3e" data-is-flush-left="true" data-source="listing-----3ef41567ff3e---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/3ef41567ff3e" data-action-source="listing-----3ef41567ff3e---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="3ef41567ff3e">131</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="3ef41567ff3e"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="5da5e4831b5e" data-source="---------5"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@gkz" data-action="show-user-card" data-action-value="95a4c0399e1f" data-action-type="hover" data-user-id="95a4c0399e1f" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*nFcMwZ15r7EnAmgTdOLXhA.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of George Zahariev"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@gkz?source=---------5" data-action="show-user-card" data-action-source="---------5" data-action-value="95a4c0399e1f" data-action-type="hover" data-user-id="95a4c0399e1f" dir="auto">George Zahariev</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flow-type?source=---------5" data-action="show-collection-card" data-action-source="---------5" data-action-value="flow-type" data-action-type="hover">Flow</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flow-type/improved-flow-docs-and-try-flow-5da5e4831b5e?source=---------5" data-action="open-post" data-action-value="https://medium.com/flow-type/improved-flow-docs-and-try-flow-5da5e4831b5e?source=---------5" data-action-source="preview-listing" ><time datetime="2023-09-19T18:46:46.965Z">Sep 19, 2023</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="2 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/flow-type/improved-flow-docs-and-try-flow-5da5e4831b5e?source=---------5" title="Latest stories published on Flow – Medium" aria-label="Latest stories published on Flow – Medium" data-action="open-post" data-action-source="---------5" data-action-value="https://medium.com/flow-type/improved-flow-docs-and-try-flow-5da5e4831b5e?source=---------5" data-action-index="5" data-post-id="5da5e4831b5e"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="0*-FY6CARAa-bToGpo" data-width="1600" data-height="868" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/0*-FY6CARAa-bToGpo"></div></figure><h3 name="4082" id="4082" class="graf graf--h3 graf-after--figure graf--title">Improved Flow Docs and Try Flow</h3><p name="ed19" id="ed19" class="graf graf--p graf-after--h3 graf--trailing">We’ve refreshed our <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://flow.org/en/docs/">documentation</span>, and added the ability to configure options and lints in <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://flow.org/try/">Try Flow</span>!</p></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/improved-flow-docs-and-try-flow-5da5e4831b5e?source=---------5" data-action="open-post" data-action-source="---------5" data-action-value="https://medium.com/flow-type/improved-flow-docs-and-try-flow-5da5e4831b5e?source=---------5" data-post-id="5da5e4831b5e">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="5da5e4831b5e" data-is-flush-left="true" data-source="listing-----5da5e4831b5e---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/5da5e4831b5e" data-action-source="listing-----5da5e4831b5e---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="5da5e4831b5e">105</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="5da5e4831b5e"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="ff4d7f11c50a" data-source="---------6"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@gkz" data-action="show-user-card" data-action-value="95a4c0399e1f" data-action-type="hover" data-user-id="95a4c0399e1f" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*nFcMwZ15r7EnAmgTdOLXhA.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of George Zahariev"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@gkz?source=---------6" data-action="show-user-card" data-action-source="---------6" data-action-value="95a4c0399e1f" data-action-type="hover" data-user-id="95a4c0399e1f" dir="auto">George Zahariev</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flow-type?source=---------6" data-action="show-collection-card" data-action-source="---------6" data-action-value="flow-type" data-action-type="hover">Flow</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flow-type/announcing-5-new-flow-tuple-type-features-ff4d7f11c50a?source=---------6" data-action="open-post" data-action-value="https://medium.com/flow-type/announcing-5-new-flow-tuple-type-features-ff4d7f11c50a?source=---------6" data-action-source="preview-listing" ><time datetime="2023-08-17T19:56:22.605Z">Aug 17, 2023</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/flow-type/announcing-5-new-flow-tuple-type-features-ff4d7f11c50a?source=---------6" title="Latest stories published on Flow – Medium" aria-label="Latest stories published on Flow – Medium" data-action="open-post" data-action-source="---------6" data-action-value="https://medium.com/flow-type/announcing-5-new-flow-tuple-type-features-ff4d7f11c50a?source=---------6" data-action-index="6" data-post-id="ff4d7f11c50a"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="previewTitle" id="previewTitle" class="graf graf--h3 graf--leading graf--title">Announcing 5 new Flow tuple type features</h3><h4 name="previewSubtitle" id="previewSubtitle" class="graf graf--h4 graf-after--h3 graf--subtitle">Labeled tuple elements, read-only tuples, optional tuple elements, tuple spread, and more.</h4><p name="previewSnippet0" id="previewSnippet0" class="graf graf--p graf-after--h4 graf--trailing">Tuples are a lighter weight alternative to objects when you want to group data…</p></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/announcing-5-new-flow-tuple-type-features-ff4d7f11c50a?source=---------6" data-action="open-post" data-action-source="---------6" data-action-value="https://medium.com/flow-type/announcing-5-new-flow-tuple-type-features-ff4d7f11c50a?source=---------6" data-post-id="ff4d7f11c50a">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="ff4d7f11c50a" data-is-flush-left="true" data-source="listing-----ff4d7f11c50a---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/ff4d7f11c50a" data-action-source="listing-----ff4d7f11c50a---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="ff4d7f11c50a">51</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/announcing-5-new-flow-tuple-type-features-ff4d7f11c50a?source=---------6#--responses" data-action-source="---------6">1 response</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="ff4d7f11c50a"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="b49341256640" data-source="---------7"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@darichey" data-action="show-user-card" data-action-value="5fee5a0ae64" data-action-type="hover" data-user-id="5fee5a0ae64" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*Ay9JVcFa5E2zf5pb8cOu4Q.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of David Richey"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@darichey?source=---------7" data-action="show-user-card" data-action-source="---------7" data-action-value="5fee5a0ae64" data-action-type="hover" data-user-id="5fee5a0ae64" dir="auto">David Richey</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flow-type?source=---------7" data-action="show-collection-card" data-action-source="---------7" data-action-value="flow-type" data-action-type="hover">Flow</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flow-type/flow-can-now-detect-unused-promises-b49341256640?source=---------7" data-action="open-post" data-action-value="https://medium.com/flow-type/flow-can-now-detect-unused-promises-b49341256640?source=---------7" data-action-source="preview-listing" ><time datetime="2023-04-10T21:22:01.990Z">Apr 10, 2023</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="2 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/flow-type/flow-can-now-detect-unused-promises-b49341256640?source=---------7" title="Latest stories published on Flow – Medium" aria-label="Latest stories published on Flow – Medium" data-action="open-post" data-action-source="---------7" data-action-value="https://medium.com/flow-type/flow-can-now-detect-unused-promises-b49341256640?source=---------7" data-action-index="7" data-post-id="b49341256640"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="f0ad" id="f0ad" class="graf graf--h3 graf--leading graf--title">Flow can now detect unused Promises</h3><p name="7061" id="7061" class="graf graf--p graf-after--h3 graf--trailing">As of v0.201.0, Flow can now lint against unused/floating Promises. Unused promises can be dangerous, because errors are potentially unhandled, and the code may not execute in the intended order. They are usually mistakes that Flow is perfectly positioned to warn you…</p></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/flow-can-now-detect-unused-promises-b49341256640?source=---------7" data-action="open-post" data-action-source="---------7" data-action-value="https://medium.com/flow-type/flow-can-now-detect-unused-promises-b49341256640?source=---------7" data-post-id="b49341256640">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="b49341256640" data-is-flush-left="true" data-source="listing-----b49341256640---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/b49341256640" data-action-source="listing-----b49341256640---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="b49341256640">51</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="b49341256640"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="3a32f0bf2a20" data-source="---------8"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@gkz" data-action="show-user-card" data-action-value="95a4c0399e1f" data-action-type="hover" data-user-id="95a4c0399e1f" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*nFcMwZ15r7EnAmgTdOLXhA.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of George Zahariev"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@gkz?source=---------8" data-action="show-user-card" data-action-source="---------8" data-action-value="95a4c0399e1f" data-action-type="hover" data-user-id="95a4c0399e1f" dir="auto">George Zahariev</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flow-type?source=---------8" data-action="show-collection-card" data-action-source="---------8" data-action-value="flow-type" data-action-type="hover">Flow</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flow-type/announcing-partial-required-flow-utility-types-catch-annotations-3a32f0bf2a20?source=---------8" data-action="open-post" data-action-value="https://medium.com/flow-type/announcing-partial-required-flow-utility-types-catch-annotations-3a32f0bf2a20?source=---------8" data-action-source="preview-listing" ><time datetime="2023-03-15T20:02:56.785Z">Mar 15, 2023</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/flow-type/announcing-partial-required-flow-utility-types-catch-annotations-3a32f0bf2a20?source=---------8" title="Latest stories published on Flow – Medium" aria-label="Latest stories published on Flow – Medium" data-action="open-post" data-action-source="---------8" data-action-value="https://medium.com/flow-type/announcing-partial-required-flow-utility-types-catch-annotations-3a32f0bf2a20?source=---------8" data-action-index="8" data-post-id="3a32f0bf2a20"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*iAWZHLO6O7pSAxP079bUcg.png" data-width="1280" data-height="720" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*iAWZHLO6O7pSAxP079bUcg.png"></div></figure><h3 name="b12c" id="b12c" class="graf graf--h3 graf-after--figure graf--trailing graf--title">Announcing Partial &amp; Required Flow utility types + catch annotations</h3></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/announcing-partial-required-flow-utility-types-catch-annotations-3a32f0bf2a20?source=---------8" data-action="open-post" data-action-source="---------8" data-action-value="https://medium.com/flow-type/announcing-partial-required-flow-utility-types-catch-annotations-3a32f0bf2a20?source=---------8" data-post-id="3a32f0bf2a20">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="3a32f0bf2a20" data-is-flush-left="true" data-source="listing-----3a32f0bf2a20---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/3a32f0bf2a20" data-action-source="listing-----3a32f0bf2a20---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="3a32f0bf2a20">54</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="3a32f0bf2a20"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="cc559af6f69" data-source="---------9"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@gkz" data-action="show-user-card" data-action-value="95a4c0399e1f" data-action-type="hover" data-user-id="95a4c0399e1f" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*nFcMwZ15r7EnAmgTdOLXhA.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of George Zahariev"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@gkz?source=---------9" data-action="show-user-card" data-action-source="---------9" data-action-value="95a4c0399e1f" data-action-type="hover" data-user-id="95a4c0399e1f" dir="auto">George Zahariev</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flow-type?source=---------9" data-action="show-collection-card" data-action-source="---------9" data-action-value="flow-type" data-action-type="hover">Flow</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flow-type/exact-object-types-by-default-by-default-cc559af6f69?source=---------9" data-action="open-post" data-action-value="https://medium.com/flow-type/exact-object-types-by-default-by-default-cc559af6f69?source=---------9" data-action-source="preview-listing" ><time datetime="2023-02-16T18:07:09.644Z">Feb 16, 2023</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="2 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/flow-type/exact-object-types-by-default-by-default-cc559af6f69?source=---------9" title="Latest stories published on Flow – Medium" aria-label="Latest stories published on Flow – Medium" data-action="open-post" data-action-source="---------9" data-action-value="https://medium.com/flow-type/exact-object-types-by-default-by-default-cc559af6f69?source=---------9" data-action-index="9" data-post-id="cc559af6f69"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="f249" id="f249" class="graf graf--h3 graf--leading graf--title">Exact object types by default, by default</h3><p name="3b52" id="3b52" class="graf graf--p graf-after--h3 graf--trailing">We <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://medium.com/flow-type/on-the-roadmap-exact-objects-by-default-16b72933c5cf">announced 5 years ago</span> a plan to eventually make <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://flow.org/en/docs/types/objects/#toc-exact-object-types">exact object types</span> the <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://flow.org/en/docs/config/options/#toc-exact-by-default-boolean">default</span>. We are now proceeding with this plan. Starting with Flow 0.200, you must explicitly set either <code class="markup--code markup--p-code">exact_by_default=true</code> or <code class="markup--code markup--p-code">exact_by_default=false</code> in the <code class="markup--code markup--p-code">[options]</code> section of…</p></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/exact-object-types-by-default-by-default-cc559af6f69?source=---------9" data-action="open-post" data-action-source="---------9" data-action-value="https://medium.com/flow-type/exact-object-types-by-default-by-default-cc559af6f69?source=---------9" data-post-id="cc559af6f69">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="cc559af6f69" data-is-flush-left="true" data-source="listing-----cc559af6f69---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/cc559af6f69" data-action-source="listing-----cc559af6f69---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="cc559af6f69">71</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flow-type/exact-object-types-by-default-by-default-cc559af6f69?source=---------9#--responses" data-action-source="---------9">2 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="cc559af6f69"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div></div></div></div><div class="col u-xs-size12of12 u-size4of12 js-aboutCollectionBox"><header class="heading heading--borderedBottom heading--paddedTop" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title heading-title--dark heading-title--lineHeightTight"><a class="link link--darken u-accentColor--textDarken u-baseColor--link" href="https://medium.com/flow-type/about">About</a></span></div></div></header><div class="u-tableCell"><a class="link u-baseColor--link avatar avatar--roundedRectangle" href="https://medium.com/flow-type" title="Go to Flow" aria-label="Go to Flow"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*mlCLV-3rGy-pLbUsMYEGoA.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Flow"></a></div><div class="u-tableCell u-verticalAlignMiddle u-textColorNormal u-fontSize16 u-breakWord u-paddingLeft10">Flow</div><div class="u-fontSize14 u-lineHeightBaseSans u-textColorDark u-paddingTop15 u-paddingBottom15"><div class="u-marginBottom15 u-breakWord">The official publication for the Flow static type checker for JavaScript. Code faster. Code smarter. Code confidently.</div><a class=" link--darken u-accentColor--textDarken link--accent u-accentColor--textNormal" href="https://medium.com/flow-type/about">More information</a></div><div class="u-fontSize14 u-lineHeightBaseSans u-textColorDark u-paddingBottom15"><header class="heading heading--allCaps heading--light" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title">Followers</span></div></div></header>1.5K </div><div class="u-fontSize14 u-lineHeightBaseSans u-marginBottom4 u-paddingBottom15"><header class="heading heading--allCaps heading--light" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title">Elsewhere</span></div></div></header><div class="linkSet"><a class="button button--dark button--chromeless is-touchIconBlackPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--dark button--chromeless" href="https://twitter.com/flowtype" title="X profile" aria-label="X profile" target="_blank"><span class="button-defaultState"><span class="svgIcon svgIcon--twitter svgIcon--21px"><svg class="svgIcon-use" width="21" height="21" fill="none" ><path d="M11.74 9.478l4.842-5.628h-1.147l-4.204 4.887L7.873 3.85H4l5.078 7.39L4 17.142h1.147l4.44-5.16 3.546 5.16h3.873L11.74 9.478zm-1.571 1.827l-.514-.736L5.56 4.714h1.762l3.304 4.725.514.736 4.295 6.143h-1.763l-3.504-5.013z" fill="#242424"/></svg></span></span></a></div></div></div></div></div><style class="js-collectionStyle"> .u-accentColor--borderLight {border-color: #7D868F !important;} .u-accentColor--borderNormal {border-color: #7D868F !important;} .u-accentColor--borderDark {border-color: #6C737A !important;} .u-accentColor--iconLight .svgIcon,.u-accentColor--iconLight.svgIcon {fill: #7D868F !important;} .u-accentColor--iconNormal .svgIcon,.u-accentColor--iconNormal.svgIcon {fill: #7D868F !important;} .u-accentColor--iconDark .svgIcon,.u-accentColor--iconDark.svgIcon {fill: #6C737A !important;} .u-accentColor--textNormal {color: #6C737A !important;} .u-accentColor--hoverTextNormal:hover {color: #6C737A !important;} .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #636970 !important;} .u-accentColor--textDark {color: #636970 !important;} .u-accentColor--backgroundLight {background-color: #7D868F !important;} .u-accentColor--backgroundNormal {background-color: #7D868F !important;} .u-accentColor--backgroundDark {background-color: #6C737A !important;} .u-accentColor--buttonDark {border-color: #6C737A !important; color: #636970 !important;} .u-accentColor--buttonDark:hover {border-color: #636970 !important;} .u-accentColor--buttonDark .icon:before,.u-accentColor--buttonDark .svgIcon{color: #6C737A !important; fill: #6C737A !important;} .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #7D868F !important; color: #6C737A !important;} .u-accentColor--buttonNormal:hover {border-color: #6C737A !important;} .u-accentColor--buttonNormal .icon:before,.u-accentColor--buttonNormal .svgIcon{color: #7D868F !important; fill: #7D868F !important;} .u-accentColor--buttonNormal.button--filled .icon:before,.u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonDark.button--filled,.u-accentColor--buttonDark.button--withChrome.is-active,.u-accentColor--fillWhenActive.is-active {background-color: #6C737A !important; border-color: #6C737A !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #7D868F !important; border-color: #7D868F !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .postArticle.is-withAccentColors .markup--user,.postArticle.is-withAccentColors .markup--query {color: #6C737A !important;}.u-tintBgColor {background-color: rgba(56, 64, 72, 1) !important;}.u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(56, 64, 72, 1) 0%, rgba(56, 64, 72, 0) 100%) !important;}.u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(56, 64, 72, 0) 0%, rgba(56, 64, 72, 1) 100%) !important;} .u-tintSpectrum .u-baseColor--borderLight {border-color: #A4A8AD !important;} .u-tintSpectrum .u-baseColor--borderNormal {border-color: #C9CCD0 !important;} .u-tintSpectrum .u-baseColor--borderDark {border-color: #EEEEF1 !important;} .u-tintSpectrum .u-baseColor--iconLight .svgIcon,.u-tintSpectrum .u-baseColor--iconLight.svgIcon {fill: #A4A8AD !important;} .u-tintSpectrum .u-baseColor--iconNormal .svgIcon,.u-tintSpectrum .u-baseColor--iconNormal.svgIcon {fill: #C9CCD0 !important;} .u-tintSpectrum .u-baseColor--iconDark .svgIcon,.u-tintSpectrum .u-baseColor--iconDark.svgIcon {fill: #EEEEF1 !important;} .u-tintSpectrum .u-baseColor--textNormal {color: #C9CCD0 !important;} .u-tintSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: #FFFFFF !important;} .u-tintSpectrum .u-baseColor--textDark {color: #FFFFFF !important;} .u-tintSpectrum .u-baseColor--textDarker {color: #FFFFFF !important;} .u-tintSpectrum .u-baseColor--backgroundLight {background-color: #A4A8AD !important;} .u-tintSpectrum .u-baseColor--backgroundNormal {background-color: #C9CCD0 !important;} .u-tintSpectrum .u-baseColor--backgroundDark {background-color: #EEEEF1 !important;} .u-tintSpectrum .u-baseColor--buttonLight {border-color: #A4A8AD !important; color: #A4A8AD !important;} .u-tintSpectrum .u-baseColor--buttonLight:hover {border-color: #A4A8AD !important;} .u-tintSpectrum .u-baseColor--buttonLight .icon:before,.u-tintSpectrum .u-baseColor--buttonLight .svgIcon {color: #A4A8AD !important; fill: #A4A8AD !important;} .u-tintSpectrum .u-baseColor--buttonDark {border-color: #EEEEF1 !important; color: #FFFFFF !important;} .u-tintSpectrum .u-baseColor--buttonDark:hover {border-color: #FFFFFF !important;} .u-tintSpectrum .u-baseColor--buttonDark .icon:before,.u-tintSpectrum .u-baseColor--buttonDark .svgIcon {color: #EEEEF1 !important; fill: #EEEEF1 !important;} .u-tintSpectrum .u-baseColor--buttonNormal {border-color: #C9CCD0 !important; color: #C9CCD0 !important;} .u-tintSpectrum .u-baseColor--buttonNormal:hover {border-color: #EEEEF1 !important;} .u-tintSpectrum .u-baseColor--buttonNormal .icon:before,.u-tintSpectrum .u-baseColor--buttonNormal .svgIcon {color: #C9CCD0 !important; fill: #C9CCD0 !important;} .u-tintSpectrum .u-baseColor--buttonDark.button--filled,.u-tintSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: #EEEEF1 !important; border-color: #EEEEF1 !important; color: rgba(56, 64, 72, 1) !important; fill: rgba(56, 64, 72, 1) !important;} .u-tintSpectrum .u-baseColor--buttonNormal.button--filled,.u-tintSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: #C9CCD0 !important; border-color: #C9CCD0 !important; color: rgba(56, 64, 72, 1) !important; fill: rgba(56, 64, 72, 1) !important;} .u-tintSpectrum .u-baseColor--link {color: #C9CCD0 !important;} .u-tintSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: #FFFFFF !important;} .u-tintSpectrum .u-baseColor--link.link--darken:hover,.u-tintSpectrum .u-baseColor--link.link--darken:focus,.u-tintSpectrum .u-baseColor--link.link--darken:active {color: #FFFFFF !important;} .u-tintSpectrum .u-baseColor--link.link--dark {color: #FFFFFF !important;} .u-tintSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-tintSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-tintSpectrum .u-baseColor--link.link--dark.link--darken:active {color: #FFFFFF !important;} .u-tintSpectrum .u-baseColor--link.link--darker {color: #FFFFFF !important;} .u-tintSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: #A4A8AD;} .u-tintSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: #A4A8AD;} .u-tintSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: #A4A8AD;} .u-tintSpectrum .ui-h1,.u-tintSpectrum .ui-h2,.u-tintSpectrum .ui-h3,.u-tintSpectrum .ui-h4,.u-tintSpectrum .ui-brand1,.u-tintSpectrum .ui-brand2,.u-tintSpectrum .ui-captionStrong {color: #FFFFFF !important; fill: #FFFFFF !important;} .u-tintSpectrum .ui-body,.u-tintSpectrum .ui-caps {color: #FFFFFF !important; fill: #FFFFFF !important;} .u-tintSpectrum .ui-summary,.u-tintSpectrum .ui-caption {color: #A4A8AD !important; fill: #A4A8AD !important;} .u-tintSpectrum .u-accentColor--borderLight {border-color: #A4A8AD !important;} .u-tintSpectrum .u-accentColor--borderNormal {border-color: #C9CCD0 !important;} .u-tintSpectrum .u-accentColor--borderDark {border-color: #EEEEF1 !important;} .u-tintSpectrum .u-accentColor--iconLight .svgIcon,.u-tintSpectrum .u-accentColor--iconLight.svgIcon {fill: #A4A8AD !important;} .u-tintSpectrum .u-accentColor--iconNormal .svgIcon,.u-tintSpectrum .u-accentColor--iconNormal.svgIcon {fill: #C9CCD0 !important;} .u-tintSpectrum .u-accentColor--iconDark .svgIcon,.u-tintSpectrum .u-accentColor--iconDark.svgIcon {fill: #EEEEF1 !important;} .u-tintSpectrum .u-accentColor--textNormal {color: #C9CCD0 !important;} .u-tintSpectrum .u-accentColor--hoverTextNormal:hover {color: #C9CCD0 !important;} .u-tintSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #FFFFFF !important;} .u-tintSpectrum .u-accentColor--textDark {color: #FFFFFF !important;} .u-tintSpectrum .u-accentColor--backgroundLight {background-color: #A4A8AD !important;} .u-tintSpectrum .u-accentColor--backgroundNormal {background-color: #C9CCD0 !important;} .u-tintSpectrum .u-accentColor--backgroundDark {background-color: #EEEEF1 !important;} .u-tintSpectrum .u-accentColor--buttonDark {border-color: #EEEEF1 !important; color: #FFFFFF !important;} .u-tintSpectrum .u-accentColor--buttonDark:hover {border-color: #FFFFFF !important;} .u-tintSpectrum .u-accentColor--buttonDark .icon:before,.u-tintSpectrum .u-accentColor--buttonDark .svgIcon{color: #EEEEF1 !important; fill: #EEEEF1 !important;} .u-tintSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #C9CCD0 !important; color: #C9CCD0 !important;} .u-tintSpectrum .u-accentColor--buttonNormal:hover {border-color: #EEEEF1 !important;} .u-tintSpectrum .u-accentColor--buttonNormal .icon:before,.u-tintSpectrum .u-accentColor--buttonNormal .svgIcon{color: #C9CCD0 !important; fill: #C9CCD0 !important;} .u-tintSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-tintSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(56, 64, 72, 1) !important; fill: rgba(56, 64, 72, 1) !important;} .u-tintSpectrum .u-accentColor--buttonDark.button--filled,.u-tintSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-tintSpectrum .u-accentColor--fillWhenActive.is-active {background-color: #EEEEF1 !important; border-color: #EEEEF1 !important; color: rgba(56, 64, 72, 1) !important; fill: rgba(56, 64, 72, 1) !important;} .u-tintSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-tintSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #C9CCD0 !important; border-color: #C9CCD0 !important; color: rgba(56, 64, 72, 1) !important; fill: rgba(56, 64, 72, 1) !important;} .u-tintSpectrum .postArticle.is-withAccentColors .markup--user,.u-tintSpectrum .postArticle.is-withAccentColors .markup--query {color: #C9CCD0 !important;} .u-accentColor--highlightFaint {background-color: rgba(240, 241, 243, 1) !important;} .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(218, 225, 232, 1) !important;} .postArticle.is-withAccentColors .markup--quote.is-other {background-color: rgba(240, 241, 243, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(240, 241, 243, 1), rgba(240, 241, 243, 1));} .postArticle.is-withAccentColors .markup--quote.is-me {background-color: rgba(228, 232, 237, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(228, 232, 237, 1), rgba(228, 232, 237, 1));} .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: rgba(218, 225, 232, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(218, 225, 232, 1), rgba(218, 225, 232, 1));} .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: rgba(218, 225, 232, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(218, 225, 232, 1), rgba(218, 225, 232, 1));} .postArticle.is-withAccentColors .markup--highlight {background-color: rgba(218, 225, 232, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(218, 225, 232, 1), rgba(218, 225, 232, 1));}</style><style class="js-collectionStyleConstant">.u-imageBgColor {background-color: rgba(0, 0, 0, 0.24705882352941178);} .u-imageSpectrum .u-baseColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconLight .svgIcon,.u-imageSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--iconNormal .svgIcon,.u-imageSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconDark .svgIcon,.u-imageSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDarker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important; color: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--buttonLight .icon:before,.u-imageSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark .icon:before,.u-imageSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal .icon:before,.u-imageSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonDark.button--filled,.u-imageSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--buttonNormal.button--filled,.u-imageSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--link {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .ui-h1,.u-imageSpectrum .ui-h2,.u-imageSpectrum .ui-h3,.u-imageSpectrum .ui-h4,.u-imageSpectrum .ui-brand1,.u-imageSpectrum .ui-brand2,.u-imageSpectrum .ui-captionStrong {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-body,.u-imageSpectrum .ui-caps {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-summary,.u-imageSpectrum .ui-caption {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconLight .svgIcon,.u-imageSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--iconNormal .svgIcon,.u-imageSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconDark .svgIcon,.u-imageSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark .icon:before,.u-imageSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonDark.button--filled,.u-imageSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-imageSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-imageSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .postArticle.is-withAccentColors .markup--user,.u-imageSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--highlightFaint {background-color: rgba(255, 255, 255, 0.2) !important;} .u-imageSpectrum .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(255, 255, 255, 0.6) !important;} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: rgba(255, 255, 255, 0.2) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: rgba(255, 255, 255, 0.4) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.4));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));}.u-resetSpectrum .u-tintBgColor {background-color: rgba(255, 255, 255, 1) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%) !important;} .u-resetSpectrum .u-baseColor--borderLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderDark {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--iconLight .svgIcon,.u-resetSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconNormal .svgIcon,.u-resetSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconDark .svgIcon,.u-resetSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textNormal {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDarker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--backgroundLight {background-color: rgba(0, 0, 0, 0.09803921568627451) !important;} .u-resetSpectrum .u-baseColor--backgroundNormal {background-color: rgba(0, 0, 0, 0.2) !important;} .u-resetSpectrum .u-baseColor--backgroundDark {background-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight .icon:before,.u-resetSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark {border-color: rgba(0, 0, 0, 0.6) !important; color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--buttonDark .icon:before,.u-resetSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important; color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal .icon:before,.u-resetSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(0, 0, 0, 0.4980392156862745) !important; fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark.button--filled,.u-resetSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2980392156862745) !important; border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--buttonNormal.button--filled,.u-resetSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2) !important; border-color: rgba(0, 0, 0, 0.2) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--link {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--darken:active {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--link.link--darker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .ui-h1,.u-resetSpectrum .ui-h2,.u-resetSpectrum .ui-h3,.u-resetSpectrum .ui-h4,.u-resetSpectrum .ui-brand1,.u-resetSpectrum .ui-brand2,.u-resetSpectrum .ui-captionStrong {color: rgba(0, 0, 0, 0.8) !important; fill: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .ui-body,.u-resetSpectrum .ui-caps {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .ui-summary,.u-resetSpectrum .ui-caption {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-accentColor--borderLight {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderNormal {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderDark {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconLight .svgIcon,.u-resetSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--iconNormal .svgIcon,.u-resetSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconDark .svgIcon,.u-resetSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textDark {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundLight {background-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundNormal {background-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundDark {background-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark {border-color: rgba(17, 128, 14, 1) !important; color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark .icon:before,.u-resetSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(15, 115, 12, 1) !important; fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(26, 137, 23, 1) !important; color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(17, 128, 14, 1) !important; fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark.button--filled,.u-resetSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-resetSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(15, 115, 12, 1) !important; border-color: rgba(15, 115, 12, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-resetSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(17, 128, 14, 1) !important; border-color: rgba(17, 128, 14, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .postArticle.is-withAccentColors .markup--user,.u-resetSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(17, 128, 14, 1) !important;}</style></div></div></div><div class="loadingBar"></div><script>// <![CDATA[ window["obvInit"] = function (opt_embedded) {window["obvInit"]["embedded"] = opt_embedded; window["obvInit"]["ready"] = true;} // ]]></script><script>// <![CDATA[ var GLOBALS = {"audioUrl":"https://d1fcbxp97j4nb2.cloudfront.net","baseUrl":"https://medium.com","buildLabel":"20250409-2130-root","currentUser":{"userId":"lo_9b3dabf4d751","isVerified":false,"subscriberEmail":"","hasPastMemberships":false,"isEnrolledInHightower":false,"isEligibleForHightower":true,"hightowerLastLockedAt":0,"isWriterProgramEnrolled":true,"isWriterProgramInvited":false,"isWriterProgramOptedOut":false,"writerProgramVersion":0,"writerProgramEnrolledAt":0,"friendLinkOnboarding":0,"hasAdditionalUnlocks":false,"hasApiAccess":false,"writerProgramDistributionSettingOptedIn":false,"isSuspended":false,"collectionOnboardingSeen":0,"atsQualifiedAt":0},"currentUserHasUnverifiedEmail":false,"isAuthenticated":false,"isCurrentUserVerified":false,"miroUrl":"https://cdn-images-1.medium.com","moduleUrls":{"base":"https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.1QDk7PlNpinRWrqN7Q4_Pg.12.js","common-async":"https://cdn-static-1.medium.com/_/fp/gen-js/main-common-async.bundle.l49OpqrwkRyiGOCpAIcKuQ.12.js","hightower":"https://cdn-static-1.medium.com/_/fp/gen-js/main-hightower.bundle.Sbq5rN7mnRFFhd9663VgQg.12.js","home-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-home-screens.bundle.P5DOvs33eZq2vtnRFa9tMw.12.js","misc-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-misc-screens.bundle.xex472sRCFYoIullxjy5kw.12.js","notes":"https://cdn-static-1.medium.com/_/fp/gen-js/main-notes.bundle.uUasyPCj--9tvOJrZ2wVdA.12.js","payments":"https://cdn-static-1.medium.com/_/fp/gen-js/main-payments.bundle.QfTt0I9toSma5xqkGX8qjg.12.js","posters":"https://cdn-static-1.medium.com/_/fp/gen-js/main-posters.bundle.fU0CARH_Ay6RO1WXoJA9Sw.12.js","power-readers":"https://cdn-static-1.medium.com/_/fp/gen-js/main-power-readers.bundle.awg6phvqmvH3Xt4l3v8d8A.12.js","pubs":"https://cdn-static-1.medium.com/_/fp/gen-js/main-pubs.bundle.3o-nIeAdAXtv2qH_8KYeqA.12.js","stats":"https://cdn-static-1.medium.com/_/fp/gen-js/main-stats.bundle.kIgMxb5kGqZrzIpjXmhPMw.12.js"},"previewConfig":{"weightThreshold":1,"weightImageParagraph":0.51,"weightIframeParagraph":0.8,"weightTextParagraph":0.08,"weightEmptyParagraph":0,"weightP":0.003,"weightH":0.005,"weightBq":0.003,"minPTextLength":60,"truncateBoundaryChars":20,"detectTitle":true,"detectTitleLevThreshold":0.15},"productName":"Medium","supportsEdit":false,"termsUrl":"//policy.medium.com/medium-terms-of-service-9db0094a1e0f","textshotHost":"textshot.textshot-production.svc.cluster.local","transactionId":"1744331859040:b557425ea28d","useragent":{"browser":"ie","family":"ie","os":"windows","version":7,"supportsDesktopEdit":false,"supportsInteract":false,"supportsView":true,"isMobile":false,"isTablet":false,"isNative":false,"supportsFileAPI":false,"isTier1":false,"clientVersion":"","clientChannel":"","supportsRealScrollEvents":false,"supportsVhUnits":false,"ruinsViewportSections":false,"supportsHtml5Video":false,"supportsMagicUnderlines":false,"isWebView":false,"isFacebookWebView":false,"supportsProgressiveMedia":false,"supportsPromotedPosts":true,"isBot":false,"isNativeIphone":false,"supportsCssVariables":false,"supportsVideoSections":true,"emojiSupportLevel":1,"isSearchBot":false,"isSyndicationBot":false,"isNativeAndroid":false,"isNativeIos":false,"isSeoAuditBot":false,"isInternalApp":false,"supportsApplePay":false,"supportsScrollableMetabar":false},"variants":{"allow_access":true,"allow_signup":true,"allow_test_auth":"disallow","android_dense_post_preview":"control","android_enable_editor_new_publishing_flow":true,"android_enable_friend_links_creation":true,"android_enable_friend_links_postpage_banners":true,"android_enable_image_sharer":true,"android_enable_lists_v2":true,"android_enable_syntax_highlight":true,"android_enable_topic_portals":true,"android_rating_prompt_stories_read_threshold":2,"android_two_hour_refresh":true,"available_annual_plan":"2c754bcc2995","available_annual_premium_plan":"4a442ace1476","available_monthly_plan":"60e220181034","available_monthly_premium_plan":"12a660186432","browsable_stream_config_bucket":"curated-topics","can_receive_tips_v0":true,"can_send_tips_v0":true,"coronavirus_topic_recirc":true,"disable_partner_program_enrollment":true,"disable_rex_pub_featuring_recirc":true,"enable_abandoned_cart_promotion_email":true,"enable_abandoned_paywall_promotion_email":true,"enable_android_dynamic_aspirational_paywall":true,"enable_android_dynamic_programming_paywall":true,"enable_android_miro_v2":true,"enable_android_offline_reading":true,"enable_android_verified_author":true,"enable_app_flirty_thirty":true,"enable_apple_sign_in":true,"enable_apple_webhook":true,"enable_aurora_pub_follower_page":true,"enable_author_cards":true,"enable_author_cards_byline":true,"enable_auto_follow_on_subscribe":true,"enable_automod":true,"enable_bg_post_post":true,"enable_boost_experiment":"control","enable_braintree_apple_pay":true,"enable_braintree_client":true,"enable_braintree_google_pay":true,"enable_braintree_integration":true,"enable_braintree_paypal":true,"enable_braintree_trial_membership":true,"enable_braintree_webhook":true,"enable_branch_io":true,"enable_cache_less_following_feed":true,"enable_cancellation_discount_v1_1":true,"enable_configure_pronouns":true,"enable_conversion_model_v2":"group_2","enable_conversion_ranker_v2":"control","enable_creator_welcome_email":true,"enable_deprecate_legacy_providers_v3":true,"enable_deviant_get_variant_flag_from_medium2":true,"enable_diversification_rex":true,"enable_engagement_service_publish_response":true,"enable_entities_to_follow_v2":true,"enable_eventstats_event_processing":true,"enable_footer_app_buttons":true,"enable_google_one_tap":true,"enable_google_webhook":true,"enable_group_gifting":true,"enable_homepage_featured_feed":true,"enable_hybrid_ranking_model":"experiment","enable_iceland_forced_android":true,"enable_inline_comments":true,"enable_intrinsic_automatic_actions":true,"enable_ios_autorefresh":true,"enable_ios_dynamic_paywall_aspiriational":true,"enable_ios_dynamic_paywall_programming":true,"enable_ios_easy_resubscribe":true,"enable_ios_offline_reading":true,"enable_legacy_feed_in_iceland":true,"enable_lite_archive_page":true,"enable_lite_continue_this_thread":true,"enable_lite_gql_client_events":true,"enable_lite_homepage":true,"enable_lite_response_markup":true,"enable_lite_server_upstream_deadlines":true,"enable_lo_homepage":"control","enable_maim_the_meter":true,"enable_marketing_emails":true,"enable_mastodon_avatar_upload":true,"enable_mastodon_for_members":true,"enable_mastodon_for_members_username_selection":true,"enable_medium2_kbfd":true,"enable_medium_com_canonical_urls":true,"enable_members_only_audio":true,"enable_ml_rank_rex_anno":true,"enable_moc_load_processor_all_recs_surfaces":true,"enable_moc_load_processor_c":true,"enable_moc_load_processor_first_story":true,"enable_new_manage_membership_flow":true,"enable_new_stripe_customers":true,"enable_newsletter_lo_flow_custom_domains":true,"enable_pill_based_home_feed":true,"enable_post_bottom_responses":true,"enable_post_bottom_responses_input":true,"enable_post_bottom_responses_native":true,"enable_post_publish_permission_check":true,"enable_pp_country_expansion":true,"enable_pp_delinquency_and_forfeiture":true,"enable_pp_v4":true,"enable_pre_pp_v4":true,"enable_premium_tier":true,"enable_premium_tier_badge":true,"enable_pub_featuring":true,"enable_pub_featuring_notifications":true,"enable_pub_featuring_post_page_label":true,"enable_pub_featuring_stats":true,"enable_ranker_v10":"control","enable_recaptcha_enterprise":true,"enable_recirc_model":true,"enable_recommended_publishers_query":true,"enable_rex_aggregator_v2":true,"enable_rex_new_push_notification_endpoint":true,"enable_rex_reading_history":true,"enable_rito_upstream_deadlines":true,"enable_seamless_social_sharing":true,"enable_see_pronouns":true,"enable_sharer_create_post_share_key":true,"enable_sharer_validate_post_share_key":true,"enable_simplified_digest_v2_b":true,"enable_speechify_ios":true,"enable_speechify_widget":true,"enable_sprig":true,"enable_starspace":true,"enable_story_subscribe_copy":true,"enable_susi_redesign_android":true,"enable_susi_redesign_ios":true,"enable_switch_plan_premium_tier":true,"enable_tag_recs":true,"enable_tick_landing_page":true,"enable_tipping_v0_android":true,"enable_tipping_v0_ios":true,"enable_track_user_interactions":true,"enable_tribute_landing_page":true,"enable_trust_service_recaptcha":true,"enable_update_explore_wtf":true,"enable_update_topic_portals_wtf":true,"enable_updated_pub_recs_ui":true,"enable_user_profile_nofollow_attribute":true,"enable_verifications_service":true,"enable_winback_promotion_email":true,"get_highlights_from_engagement":true,"glyph_font_set":"m2-unbound-source-serif-pro","goliath_externalsearch_enable_comment_deindexation":true,"ios_display_paywall_after_onboarding":true,"ios_enable_friend_links_creation":true,"ios_enable_friend_links_postpage_banners":true,"ios_enable_home_post_menu":true,"ios_enable_lock_responses":true,"ios_enable_verified_book_author":true,"ios_iceland_nux":true,"ios_in_app_free_trial":true,"ios_remove_twitter_onboarding_step":true,"ios_social_share_sheet":true,"limit_post_referrers":true,"limit_user_follows":true,"mobile_custom_app_icon":true,"num_post_bottom_responses_to_show":3,"onboarding_tags_from_top_views":true,"reader_fair_distribution_non_qp":true,"redefined_top_posts":true,"reengagement_notification_duration":3,"rex_enable_filter_viewed_v2":true,"rex_filter_presentation_count_increase":"experiment_a","rex_generator_max_candidates":1000,"signin_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","signup_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","skip_fs_cache_user_vals":true},"xsrfToken":"","iosAppId":"828256236","supportEmail":"yourfriends@medium.com","fp":{"/icons/monogram-mask.svg":"https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg","/icons/favicon-medium-editor.ico":"https://cdn-static-1.medium.com/_/fp/icons/favicon-medium-editor.PiakrZWB7Yb80quUVQWM6g.12.ico"},"authBaseUrl":"https://medium.com","imageUploadSizeMb":25,"isAuthDomainRequest":true,"algoliaApiEndpoint":"https://MQ57UUUQZ2-dsn.algolia.net","algoliaAppId":"MQ57UUUQZ2","algoliaSearchOnlyApiKey":"394474ced050e3911ae2249ecc774921","iosAppStoreUrl":"https://itunes.apple.com/app/medium-everyones-stories/id828256236?pt=698524&mt=8","iosAppLinkBaseUrl":"medium:","algoliaIndexPrefix":"medium_","androidPlayStoreUrl":"https://play.google.com/store/apps/details?id=com.medium.reader","googleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","androidPackage":"com.medium.reader","androidPlayStoreMarketScheme":"market://details?id=com.medium.reader","googleAuthUri":"https://accounts.google.com/o/oauth2/auth","androidScheme":"medium","layoutData":{"useDynamicScripts":false,"googleAnalyticsTrackingCode":"G-7JY7T788PK","jsShivUrl":"https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js","useDynamicCss":false,"faviconUrl":"https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","faviconImageId":"5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","fontSets":[{"id":8,"url":"https://glyph.medium.com/css/e/sr/latin/e/ssr/latin/e/ssb/latin/m2-unbound-source-serif-pro.css"},{"id":11,"url":"https://glyph.medium.com/css/m2-unbound-source-serif-pro.css"},{"id":9,"url":"https://glyph.medium.com/css/mkt.css"}],"glyphUrl":"https://glyph.medium.com"},"authBaseUrlRev":"moc.muidem//:sptth","stripePublishableKey":"pk_live_7FReX44VnNIInZwrIIx6ghjl","archiveUploadSizeMb":100,"previewConfig2":{"weightThreshold":1,"weightImageParagraph":0.05,"raiseImage":true,"enforceHeaderHierarchy":true,"isImageInsetRight":true},"isAmp":false,"iosScheme":"medium","facebook":{"key":"542599432471018","namespace":"medium-com","scope":{"default":["public_profile","email"],"connect":["public_profile","email"],"login":["public_profile","email"],"share":["public_profile","email"]}},"memberContentTopicId":"13d7efd82fb2","audioContentTopicId":"3792abbd134","isDoNotAuth":false,"buggle":{"videoUrl":"https://cdn-videos-1.medium.com","audioUrl":"https://cdn-audio-1.medium.com"},"referrerType":5,"partnerProgramEmail":"partnerprogram@medium.com","recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","countryCode":"SG","bypassMeter":false,"branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","paypal":{"clientMode":"production","oneYearGift":{"name":"Medium Membership (1 Year, Digital Gift Code)","description":"Unlimited access to the best and brightest stories on Medium. Gift codes can be redeemed at medium.com/redeem.","price":"50.00","currency":"USD","sku":"membership-gift-1-yr"}},"collectionConfig":{"mediumOwnedAndOperatedCollectionIds":["8a9336e5bb4","b7e45b22fec3","193b68bd4fba","8d6b8a439e32","54c98c43354d","3f6ecf56618","d944778ce714","92d2092dc598","ae2a65f35510","1285ba81cada","544c7006046e","fc8964313712","40187e704f1c","88d9857e584e","7b6769f2748b","bcc38c8f6edf","cef6983b292","cb8577c9149e","444d13b52878","713d7dbc99b0","ef8e90590e66","191186aaafa0","55760f21cdc5","9dc80918cc93","bdc4052bbdba","8ccfed20cbb2"]},"bypassMeterWithShareKey":false,"recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","braintreeClientKey":"production_zjkj96jm_m56f8fqpf7ngnrd4","cdcMessaging":[{"text":"For more information on the novel coronavirus and Covid-19, visit ","href":"","type":"text","start":0,"end":0},{"text":"cdc.gov","href":"https://www.cdc.gov/coronavirus/2019-nCoV","type":"link","start":66,"end":73},{"text":".","href":"","type":"text","start":0,"end":0}],"braintree":{"merchantId":"m56f8fqpf7ngnrd4"},"diagnostics":{},"domain":"medium.com"} // ]]></script><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.1QDk7PlNpinRWrqN7Q4_Pg.12.js" async></script><script>// <![CDATA[ window["obvInit"]({"references":{"User":{"953cde5de02":{"userId":"953cde5de02","name":"Jordan Brown","username":"jordanbrown215","createdAt":1500993258119,"imageId":"0*vKNcrvCUYN_kVSkS.","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"Jordan Brown","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[32,3,2,1,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"ef334788334b":{"userId":"ef334788334b","name":"Alex Taylor","username":"alexmckenley","createdAt":1586894364250,"imageId":"0*DPV4eX3sdJ2wH5Ew","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[8,44,29],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"369e550db90e":{"userId":"369e550db90e","name":"Panagiotis Vekris","username":"panvekris","createdAt":1501482271166,"imageId":"","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[8,2],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"b4c39a4d72c1":{"userId":"b4c39a4d72c1","name":"Sam Zhou","username":"samzhou","createdAt":1664390690481,"imageId":"0*AII7r6X5PwPjNgPj","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[2,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"95a4c0399e1f":{"userId":"95a4c0399e1f","name":"George Zahariev","username":"gkz","createdAt":1449204123799,"imageId":"1*nFcMwZ15r7EnAmgTdOLXhA.jpeg","backgroundImageId":"","bio":"https://twitter.com/gkzahariev","twitterScreenName":"gkzahariev","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[29,5,53,30,2,18,1,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"5fee5a0ae64":{"userId":"5fee5a0ae64","name":"David Richey","username":"darichey","createdAt":1650320686157,"imageId":"1*Ay9JVcFa5E2zf5pb8cOu4Q.jpeg","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[2,29,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"}},"Collection":{"ab067ae921ed":{"id":"ab067ae921ed","name":"Flow","slug":"flow-type","tags":["JAVASCRIPT","FLOW","REACT","PROGRAMMING","PROGRAMMING LANGUAGES"],"creatorId":"953cde5de02","description":"The official publication for the Flow static type checker for JavaScript. Code faster. Code smarter. Code confidently.","shortDescription":"The official publication for the Flow static type checker…","image":{"imageId":"1*mlCLV-3rGy-pLbUsMYEGoA.png","filter":"","backgroundSize":"","originalWidth":1481,"originalHeight":1481,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":1540,"activeAt":1722979439212},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"1*wgxj1RRhhI9pi2M_pvd3Kw.png","filter":"","backgroundSize":"","originalWidth":1680,"originalHeight":700,"strategy":"resample","height":0,"width":0},"twitterUsername":"flowtype","sections":[{"type":2,"collectionHeaderMetadata":{"title":"","description":"Code faster. Code smarter. Code confidently.","backgroundImage":{},"logoImage":{"id":"1*wgxj1RRhhI9pi2M_pvd3Kw@2x.png","originalWidth":1680,"originalHeight":700,"alt":"Flow"},"alignment":2,"layout":6}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":7,"postIds":[]}}],"tintColor":"#FF384048","lightText":true,"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF7D868F","point":0},{"color":"#FF757C85","point":0.1},{"color":"#FF6C737A","point":0.2},{"color":"#FF636970","point":0.3},{"color":"#FF5A5F65","point":0.4},{"color":"#FF51555A","point":0.5},{"color":"#FF474A4E","point":0.6},{"color":"#FF3C3F42","point":0.7},{"color":"#FF313436","point":0.8},{"color":"#FF262729","point":0.9},{"color":"#FF191A1B","point":1}],"backgroundColor":"#FFFFFFFF"},"tintBackgroundSpectrum":{"colorPoints":[{"color":"#FF384048","point":0},{"color":"#FF50575F","point":0.1},{"color":"#FF666D74","point":0.2},{"color":"#FF7B8188","point":0.3},{"color":"#FF90959B","point":0.4},{"color":"#FFA4A8AD","point":0.5},{"color":"#FFB7BABF","point":0.6},{"color":"#FFC9CCD0","point":0.7},{"color":"#FFDCDDE0","point":0.8},{"color":"#FFEEEEF1","point":0.9},{"color":"#FFFFFFFF","point":1}],"backgroundColor":"#FF384048"},"highlightSpectrum":{"colorPoints":[{"color":"#FFF2F2F5","point":0},{"color":"#FFF0F1F3","point":0.1},{"color":"#FFEEEFF2","point":0.2},{"color":"#FFEBEDF1","point":0.3},{"color":"#FFE9EBF0","point":0.4},{"color":"#FFE6E9EE","point":0.5},{"color":"#FFE4E8ED","point":0.6},{"color":"#FFE2E6EC","point":0.7},{"color":"#FFDFE4EB","point":0.8},{"color":"#FFDDE2EA","point":0.9},{"color":"#FFDAE1E8","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF959EA7","point":0},{"color":"#FF9FA6AF","point":0.1},{"color":"#FFA8AFB7","point":0.2},{"color":"#FFB1B7BE","point":0.3},{"color":"#FFBABFC6","point":0.4},{"color":"#FFC3C7CD","point":0.5},{"color":"#FFCCCFD4","point":0.6},{"color":"#FFD5D7DB","point":0.7},{"color":"#FFDDDFE2","point":0.8},{"color":"#FFE6E6E9","point":0.9},{"color":"#FFEFEEF0","point":1}],"backgroundColor":"#FF000000"}},"navItems":[],"colorBehavior":2,"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"","description":"Code faster. Code smarter. Code confidently.","backgroundImage":{},"logoImage":{"id":"1*wgxj1RRhhI9pi2M_pvd3Kw@2x.png","originalWidth":1680,"originalHeight":700,"alt":"Flow"},"alignment":2,"layout":6},"subscriberCount":1540,"tagline":"The official publication for the Flow static type checker","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092870597,"type":"Collection"}}},"paging":{"previous":{"limit":10,"from":"1722979439118"},"next":{"limit":10,"to":"1676570829644"}},"collection":{"id":"ab067ae921ed","name":"Flow","slug":"flow-type","tags":["JAVASCRIPT","FLOW","REACT","PROGRAMMING","PROGRAMMING LANGUAGES"],"creatorId":"953cde5de02","description":"The official publication for the Flow static type checker for JavaScript. Code faster. Code smarter. Code confidently.","shortDescription":"The official publication for the Flow static type checker…","image":{"imageId":"1*mlCLV-3rGy-pLbUsMYEGoA.png","filter":"","backgroundSize":"","originalWidth":1481,"originalHeight":1481,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":1540,"activeAt":1722979439212},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"1*wgxj1RRhhI9pi2M_pvd3Kw.png","filter":"","backgroundSize":"","originalWidth":1680,"originalHeight":700,"strategy":"resample","height":0,"width":0},"twitterUsername":"flowtype","sections":[{"type":2,"collectionHeaderMetadata":{"title":"","description":"Code faster. Code smarter. Code confidently.","backgroundImage":{},"logoImage":{"id":"1*wgxj1RRhhI9pi2M_pvd3Kw@2x.png","originalWidth":1680,"originalHeight":700,"alt":"Flow"},"alignment":2,"layout":6}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":7,"postIds":[]}}],"tintColor":"#FF384048","lightText":true,"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF7D868F","point":0},{"color":"#FF757C85","point":0.1},{"color":"#FF6C737A","point":0.2},{"color":"#FF636970","point":0.3},{"color":"#FF5A5F65","point":0.4},{"color":"#FF51555A","point":0.5},{"color":"#FF474A4E","point":0.6},{"color":"#FF3C3F42","point":0.7},{"color":"#FF313436","point":0.8},{"color":"#FF262729","point":0.9},{"color":"#FF191A1B","point":1}],"backgroundColor":"#FFFFFFFF"},"tintBackgroundSpectrum":{"colorPoints":[{"color":"#FF384048","point":0},{"color":"#FF50575F","point":0.1},{"color":"#FF666D74","point":0.2},{"color":"#FF7B8188","point":0.3},{"color":"#FF90959B","point":0.4},{"color":"#FFA4A8AD","point":0.5},{"color":"#FFB7BABF","point":0.6},{"color":"#FFC9CCD0","point":0.7},{"color":"#FFDCDDE0","point":0.8},{"color":"#FFEEEEF1","point":0.9},{"color":"#FFFFFFFF","point":1}],"backgroundColor":"#FF384048"},"highlightSpectrum":{"colorPoints":[{"color":"#FFF2F2F5","point":0},{"color":"#FFF0F1F3","point":0.1},{"color":"#FFEEEFF2","point":0.2},{"color":"#FFEBEDF1","point":0.3},{"color":"#FFE9EBF0","point":0.4},{"color":"#FFE6E9EE","point":0.5},{"color":"#FFE4E8ED","point":0.6},{"color":"#FFE2E6EC","point":0.7},{"color":"#FFDFE4EB","point":0.8},{"color":"#FFDDE2EA","point":0.9},{"color":"#FFDAE1E8","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF959EA7","point":0},{"color":"#FF9FA6AF","point":0.1},{"color":"#FFA8AFB7","point":0.2},{"color":"#FFB1B7BE","point":0.3},{"color":"#FFBABFC6","point":0.4},{"color":"#FFC3C7CD","point":0.5},{"color":"#FFCCCFD4","point":0.6},{"color":"#FFD5D7DB","point":0.7},{"color":"#FFDDDFE2","point":0.8},{"color":"#FFE6E6E9","point":0.9},{"color":"#FFEFEEF0","point":1}],"backgroundColor":"#FF000000"}},"navItems":[],"colorBehavior":2,"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"","description":"Code faster. Code smarter. Code confidently.","backgroundImage":{},"logoImage":{"id":"1*wgxj1RRhhI9pi2M_pvd3Kw@2x.png","originalWidth":1680,"originalHeight":700,"alt":"Flow"},"alignment":2,"layout":6},"subscriberCount":1540,"tagline":"The official publication for the Flow static type checker","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092870597,"type":"Collection"},"posts":[{"id":"75b883c80749","versionId":"65595c9e8ced","creatorId":"953cde5de02","homeCollectionId":"ab067ae921ed","title":"Announcing: Mapped Types + Pick, Omit, and Record","detectedLanguage":"en","latestVersion":"65595c9e8ced","latestPublishedVersion":"65595c9e8ced","hasUnpublishedEdits":false,"latestRev":146,"createdAt":1722979036229,"updatedAt":1731990407876,"acceptedAt":0,"firstPublishedAt":1722979439118,"latestPublishedAt":1722979492004,"vote":false,"experimentalCss":"","displayAuthor":"","virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*2owqK37DhgF6nh6rgWvS1A.jpeg","filter":"","backgroundSize":"","originalWidth":4800,"originalHeight":3200,"strategy":"resample","height":0,"width":0},"wordCount":431,"imageCount":1,"readingTime":1.8264150943396227,"subtitle":"tl;dr: Mapped types allow you to transform object types into other object types. We have added definitions for Pick, Omit, and Record…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":1,"isBookmarked":false,"tags":[{"slug":"javascrıpt","name":"Javascrıpt","postCount":284,"metadata":{"postCount":284,"coverImage":{"id":"1*GooYXQZ1bAEa-GuSn_NJGA.jpeg","originalWidth":5304,"originalHeight":6630,"isFeatured":true}},"type":"Tag"},{"slug":"flow","name":"Flow","postCount":8349,"metadata":{"postCount":8349,"coverImage":{"id":"1*2xsd0z9fe5HIM_HMhCCV8A.png","originalWidth":1000,"originalHeight":630,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://flow.org/en/docs/lang/variance/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/utilities/#toc-objmap","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/install/#setup-compiler","alts":[],"httpStatus":200},{"url":"https://www.typescriptlang.org/docs/handbook/2/mapped-types.html","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/mapped-types/","alts":[],"httpStatus":200},{"url":"https://medium.com/flow-type/announcing-conditional-types-765b421f3a87","alts":[{"type":3,"url":"medium://p/765b421f3a87"},{"type":2,"url":"medium://p/765b421f3a87"}],"httpStatus":200},{"url":"https://github.com/facebook/flow/blob/28e31fbde379a63240b6902d6d0965570b362a36/lib/core.js#L2811-L2827","alts":[],"httpStatus":200},{"url":"https://github.com/facebook/flow/blob/main/Changelog.md#02120","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1722979493057},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":2,"sectionCount":1,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"announcing-mapped-types-pick-omit-and-record","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"announcing-mapped-types-pick-omit-and-record-75b883c80749","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*2owqK37DhgF6nh6rgWvS1A.jpeg","originalWidth":4800,"originalHeight":3200,"isFeatured":true}},{"name":"4b87","type":3,"text":"Announcing: Mapped Types + Pick, Omit, and Record","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"tl;dr: Mapped types allow you to transform object types into other object types. We have added definitions for Pick, Omit, and Record…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"ab067ae921ed","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"4b87","type":3,"text":"Announcing: Mapped Types + Pick, Omit, and Record","markups":[]},{"name":"eead","type":4,"text":"Photo by Mihis Alex on pexels.com","markups":[],"layout":1,"metadata":{"id":"1*2owqK37DhgF6nh6rgWvS1A.jpeg","originalWidth":4800,"originalHeight":3200,"isFeatured":true}},{"name":"6bba","type":1,"text":"tl;dr: Mapped types allow you to transform object types into other object types. We have added definitions for Pick, Omit, and Record utility types to our library definitions. Docs here.","markups":[{"type":10,"start":111,"end":115},{"type":10,"start":117,"end":121},{"type":10,"start":127,"end":133},{"type":3,"start":176,"end":185,"href":"https://flow.org/en/docs/types/mapped-types/","title":"","rel":"","anchorType":0},{"type":2,"start":0,"end":186}]},{"name":"be37","type":1,"text":"Mapped Types are enabled by default as of Flow v0.212. To use them, make sure you are following our recommended…","markups":[{"type":3,"start":42,"end":53,"href":"https://github.com/facebook/flow/blob/main/Changelog.md#02120","title":"","rel":"","anchorType":0},{"type":3,"start":121,"end":129,"href":"https://flow.org/en/docs/install/#setup-compiler","title":"","rel":"","anchorType":0},{"type":3,"start":145,"end":167,"href":"https://www.typescriptlang.org/docs/handbook/2/mapped-types.html","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"d216","startIndex":0}]},"isFullContent":false,"subtitle":"tl;dr: Mapped types allow you to transform object types into other object types. We have added definitions for Pick, Omit, and Record…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},{"id":"b6c5285660d0","versionId":"a9bd01910494","creatorId":"ef334788334b","homeCollectionId":"ab067ae921ed","title":"New Flow Language Features for React","detectedLanguage":"en","latestVersion":"a9bd01910494","latestPublishedVersion":"a9bd01910494","hasUnpublishedEdits":false,"latestRev":1002,"createdAt":1710438310157,"updatedAt":1732870008152,"acceptedAt":0,"firstPublishedAt":1712172624428,"latestPublishedAt":1712683038573,"vote":false,"experimentalCss":"","displayAuthor":"","virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*ofDWSeYHJ0mOxhOqA-XhgA.png","filter":"","backgroundSize":"","originalWidth":932,"originalHeight":308,"strategy":"resample","height":0,"width":0},"wordCount":1590,"imageCount":1,"readingTime":6.2,"subtitle":"Write Safer and more Succinct React with Flow","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":60,"isBookmarked":false,"tags":[{"slug":"javascript","name":"JavaScript","postCount":295043,"metadata":{"postCount":295043,"coverImage":{"id":"1*4Ora6QBxIHjwn85Hy-DbSA.png","originalWidth":5834,"originalHeight":1775,"isFeatured":true}},"type":"Tag"},{"slug":"reactjs","name":"Reactjs","postCount":33314,"metadata":{"postCount":33314,"coverImage":{"id":"0*DzxxY7308kvoikat.jpeg","originalWidth":780,"originalHeight":359,"isFeatured":true}},"type":"Tag"},{"slug":"react","name":"React","postCount":115268,"metadata":{"postCount":115268,"coverImage":{"id":"1*iEHC2DrC8Z0KKjrzwAa3cQ@2x.jpeg","originalWidth":1024,"originalHeight":1024,"backgroundSize":"","filter":"","isFeatured":false,"externalSrc":"","focusPercentX":-1,"focusPercentY":-1,"alt":"","repairedAt":0,"unsplashPhotoId":""}},"type":"Tag"},{"slug":"react-native","name":"React Native","postCount":29556,"metadata":{"postCount":29556,"coverImage":{"id":"1*4Ora6QBxIHjwn85Hy-DbSA.png","originalWidth":5834,"originalHeight":1775,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":4,"links":{"entries":[{"url":"https://react.dev/reference/rules","alts":[],"httpStatus":200},{"url":"https://react.dev/reference/react/useRef","alts":[],"httpStatus":200},{"url":"https://flow.org/try/#1N4Igxg9gdgZglgcxALlAIwIZoKYBsD6uEEAztvhgE6UYCe+JADpdhgCYowa5kA0I2KAFcAtiRQAXSkOz9sADwxgJ+NPTbYuQ3BMnTZA+Y2yU4IwRO4A6SFBIrGVDGM7c+IFkolXpUCWewUEAwhCQgRDH8wEH4hMnwROHlsNnw4KHwwSLAAC3wANyo4LFxscWQuHgMNZmwsiRSAWglaY1cq-hIAa2wJXNpG4Vxcdvdu3v7B0RxKUYMhKDBSqmbWwIq3eagoOrKSKgH0wtMMPznY7d2SfcoBiEZ-aG5G3Ix085AF-ZhsRoRehqUEiNMgSQHlSruBZxJrMcJwMhzAC+-EgGiCZkYEEoEgABMAYQBlSwNXi4mEAURgP2USNxMEo4VxAHJPMpmQBuAA6UB5kBEWJ2flxADFiAAKCBoABWyHxVEocoAgtQ6AAeYQiGYAPiRAEp8TzcbjbPZcTsAO4AeRluIAvPirE6pdKkdyoMaAPSe3EUgBKfqtfoAhLiAJoQIQm+5wFK4iQ5bC4yOA5Myup4tCheOJ3HpHaUXEKuh5ki4+xwYa4kShSIpI3m7DWmVWBUAbQADABde24gDMHNxPIbLAkQkoHqGuHdSJiIHyJhIcGgQXyHasACY+32rB2QEigA","alts":[],"httpStatus":200},{"url":"https://react.dev/reference/rules/rules-of-hooks","alts":[],"httpStatus":200},{"url":"https://react.dev/learn/keeping-components-pure","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/react/component-syntax/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/react/hook-syntax/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/react/render-types/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/react/render-types/#rendering-optional-elements","alts":[],"httpStatus":200},{"url":"https://github.com/facebook/flow/releases/tag/v0.233.0","alts":[],"httpStatus":200},{"url":"https://github.com/alexmckenley/react-flow-vite-template","alts":[],"httpStatus":200},{"url":"https://www.npmjs.com/package/eslint-plugin-react-hooks","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1712683040048},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":373,"sectionCount":1,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"announcing-component-syntax","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"announcing-component-syntax-b6c5285660d0","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*ofDWSeYHJ0mOxhOqA-XhgA.png","originalWidth":932,"originalHeight":308,"isFeatured":true}},{"name":"e978","type":3,"text":"New Flow Language Features for React","markups":[{"type":1,"start":0,"end":36}],"alignment":1},{"name":"f74f","type":13,"text":"Write Safer and more Succinct React with Flow","markups":[{"type":2,"start":0,"end":45}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Write Safer and more Succinct React with Flow"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"ab067ae921ed","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"e978","type":3,"text":"New Flow Language Features for React","markups":[{"type":1,"start":0,"end":36}]},{"name":"f74f","type":13,"text":"Write Safer and more Succinct React with Flow","markups":[{"type":2,"start":0,"end":45}]},{"name":"cc0c","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*ofDWSeYHJ0mOxhOqA-XhgA.png","originalWidth":932,"originalHeight":308,"isFeatured":true}},{"name":"a699","type":1,"text":"We have thousands of engineers committing React code every day to Meta’s largest codebases. Part of our responsibility on the Flow team is to make it as easy as possible for anyone to contribute, from design system React experts to C++ engineers making one-off internal pages to support their backend…","markups":[{"type":2,"start":174,"end":180}]}],"sections":[{"name":"73d7","startIndex":0}]},"isFullContent":false,"subtitle":"Write Safer and more Succinct React with Flow"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},{"id":"b979bb2e78cf","versionId":"8f0f9077bb3b","creatorId":"369e550db90e","homeCollectionId":"ab067ae921ed","title":"Announcing User Defined Type Guards in Flow","detectedLanguage":"en","latestVersion":"8f0f9077bb3b","latestPublishedVersion":"8f0f9077bb3b","hasUnpublishedEdits":false,"latestRev":161,"createdAt":1709658702266,"updatedAt":1732996880192,"acceptedAt":0,"firstPublishedAt":1709677634317,"latestPublishedAt":1709841413001,"vote":false,"experimentalCss":"","displayAuthor":"","virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*dpF4Tf97ukK5wCUCeDbCbg.png","filter":"","backgroundSize":"","originalWidth":706,"originalHeight":376,"strategy":"resample","height":0,"width":0},"wordCount":868,"imageCount":1,"readingTime":3.475471698113208,"subtitle":"Flow now lets you define a function that encodes a type predicate over its parameter. This predicate, which we refer to as a type guard…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":0,"isBookmarked":false,"tags":[],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://flow.org/try/#1N4Igxg9gdgZglgcxALlAJwKYEMwBcD6aArlLnALYYrgA2WAzvXGCADQgYAeOBARgJ74AJhhhYiNXClzEM7DFCLl602e0hQhcMtCw18ufgAcqyMTXpyQ5LEZNCDx0+cvzOJtBQW49AOkMm+AhEWGhCKsgyRBgAvuoQItQwJHhw0AAEoRgAchC42RI0ABScyOnkcJwYQqzp-GUVVUIAlGW8EBA02FDpAKRgABYYYADW9OnAADo96Zi4RGg9nOkAhAC86Yo0NOkAZLt1qxtbNADc0zHT0yJgdJjpAG6h6aXpAPz0MnBQCOeaw3cMI9nvV3p9PD8-tM4DAillcvlCiVavxms0JtN0lj0iUyuDvghmn9sTjQfifkSLmwQA8MGgmNBqA8AAy+ABMAEZWRyQDEgA","alts":[],"httpStatus":200},{"url":"https://flow.org/try/#1N4Igxg9gdgZglgcxALlAJwKYEMwBcD6aArlLnALYYrgA2WAzvXGCADQgYAeOBARgJ74AJhhhYiNXClzEM7DFCLl602e0hQhcMtCw18ufgAcqyMTXpyQ5LEZNCDx0+cvzOJtBQW49AOkMm+AhEWGhCKsgyRBgAvuoQItQwJHhw0AAEcPQAyjJwUAgAchI0APJoAOoAFtoY9EY4GAAU9DLI6QD8rZ4FAJTtvBAQNNhQ6QCkYFUYYADW9OnAADpj6Zi4RGhj3ekAvLvpijQ06QA+p+nd-p7kTb17++kA5E8A3CsxKysiYHSY6QA3ULpTjtLp5ArvKBwGDpJoAQiyuR6RRK5WqtXqjSanF692Wqxx7W6+QQvShnygAHoqekAMLQAEYNBkAqZHIQ1HHdE1XB1BpgDDpXAQdJYYVOdLBUJCdLJKCpDJZQ4QXDpIxoHjMPSsFY0sULXDTf7KqCijVasB6CUmYWikT0MCeXhCo1C0QwGZqiCwq55W69XzpPW0iraKoTKYzeasdIZN1xt1odJVLCaWMAMRoEAA7uleJgsPN0kQjMLpurMForXzMmNtAsGiz6CGxZoS5ZDRWoBgEFgdGMfeWhUcaABaKNzO1rUT5IWcackgq+FZsEBMtBMaDUAEABl8ACYAIz7o8gGJAA","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/type-guards#toc-restrictions-of-type-guard-functions","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/type-guards/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/functions/#predicate-functions","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/type-guards/#toc-adoption","alts":[],"httpStatus":200},{"url":"https://www.typescriptlang.org/play#code/GYVwdgxgLglg9mABGEBbA8gJwMpUwUU0zkwAoAPALkXAGsw4B3MASmvMRgGdk0AjAKaZEAH0Rc8MMAHNEAbwBQiRJgFQQmJKSgBPAA4C4wRBwC85xACIUqQZkuixug0ZOJzpq3zhwANgIBDMEsWAG4FAF8FBVBIWAROLgA5fiFCYkwARgpqOgZmNjduXlsheSU3T0zw5VV1TURnQ2MzC2tU+1DEAHpu5Q5ixkwYKCgBJCg4SOjY6HgkbhTSgiISACYcmjB6JlZ2RJK7eR6+gZ5VAK4uGGkwAQATCtn4pGAfUhZy5X73RGqKqLKN5wD41FRqDQTfTNSptGx2SzhCJAA","alts":[],"httpStatus":200},{"url":"https://developer.mozilla.org/en-US/docs/Glossary/Falsy","alts":[],"httpStatus":200},{"url":"https://github.com/facebook/flow/blob/57a92b842fc032ab2cfc94dd4bb2d9613a7cb2a2/lib/core.js#L743","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1709841413531},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":0,"sectionCount":1,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"announcing-user-defined-type-guards-in-flow","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"announcing-user-defined-type-guards-in-flow-b979bb2e78cf","previewContent":{"bodyModel":{"paragraphs":[{"name":"2430","type":4,"text":"","markups":[],"layout":9,"metadata":{"id":"1*dpF4Tf97ukK5wCUCeDbCbg.png","originalWidth":706,"originalHeight":376}},{"name":"2060","type":3,"text":"Announcing User Defined Type Guards in Flow","markups":[],"alignment":1},{"name":"49d2","type":1,"text":"Flow now lets you define a function that encodes a type predicate over its…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Flow now lets you define a function that encodes a type predicate over its parameter. This predicate, which we refer to as a type guard…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"ab067ae921ed","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"2430","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*dpF4Tf97ukK5wCUCeDbCbg.png","originalWidth":706,"originalHeight":376}},{"name":"2060","type":3,"text":"Announcing User Defined Type Guards in Flow","markups":[]},{"name":"49d2","type":1,"text":"Flow now lets you define a function that encodes a type predicate over its parameter. This predicate, which we refer to as a type guard, is annotated in place of a return type annotation as x is PredicateType. It declares that if the function returns true then its parameter x…","markups":[{"type":10,"start":190,"end":208},{"type":10,"start":251,"end":255},{"type":10,"start":275,"end":276},{"type":10,"start":288,"end":301},{"type":3,"start":125,"end":135,"href":"https://flow.org/en/docs/types/type-guards/","title":"","rel":"","anchorType":0},{"type":2,"start":125,"end":135}]}],"sections":[{"name":"be68","startIndex":0}]},"isFullContent":false,"subtitle":"Flow now lets you define a function that encodes a type predicate over its parameter. This predicate, which we refer to as a type guard…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},{"id":"765b421f3a87","versionId":"62a8bfcf2c1f","creatorId":"b4c39a4d72c1","homeCollectionId":"ab067ae921ed","title":"Announcing Conditional Types","detectedLanguage":"en","latestVersion":"62a8bfcf2c1f","latestPublishedVersion":"62a8bfcf2c1f","hasUnpublishedEdits":false,"latestRev":246,"createdAt":1709663404226,"updatedAt":1732996019115,"acceptedAt":0,"firstPublishedAt":1709672421434,"latestPublishedAt":1709679233820,"vote":false,"experimentalCss":"","displayAuthor":"","virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*kX5EhkWiLPiwmF3SSFTYKw.png","filter":"","backgroundSize":"","originalWidth":548,"originalHeight":214,"strategy":"resample","height":0,"width":0},"wordCount":570,"imageCount":1,"readingTime":2.3509433962264152,"subtitle":"Conditional types allow you to choose between two different output types by inspecting an input type. The syntax (inspired by TypeScript)…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":1,"isBookmarked":false,"tags":[],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://flow.org/en/docs/types/indexed-access/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/conditional/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/conditional/#toc-infer-type","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/utilities/#toc-diff","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/utilities/#toc-objmap","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/conditional/#toc-distributive-conditional-type","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/utilities/#toc-omit","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/utilities/#toc-return-type","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/utilities/#toc-rest","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/conditional/#toc-adoption","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1709679233975},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":10,"sectionCount":1,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"announcing-conditional-types","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"announcing-conditional-types-765b421f3a87","previewContent":{"bodyModel":{"paragraphs":[{"name":"5af1","type":4,"text":"","markups":[],"layout":9,"metadata":{"id":"1*kX5EhkWiLPiwmF3SSFTYKw.png","originalWidth":548,"originalHeight":214}},{"name":"3ea4","type":3,"text":"Announcing Conditional Types","markups":[],"alignment":1},{"name":"1f91","type":1,"text":"Conditional types allow you to choose between two different output types by inspecting an input type. The…","markups":[{"type":3,"start":0,"end":17,"href":"https://flow.org/en/docs/types/conditional/","title":"","rel":"noopener","anchorType":0}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Conditional types allow you to choose between two different output types by inspecting an input type. The syntax (inspired by TypeScript)…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"ab067ae921ed","isNewsletter":false,"newsletterId":"b29ed2fabd7c","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"5af1","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*kX5EhkWiLPiwmF3SSFTYKw.png","originalWidth":548,"originalHeight":214}},{"name":"3ea4","type":3,"text":"Announcing Conditional Types","markups":[]},{"name":"1f91","type":1,"text":"Conditional types allow you to choose between two different output types by inspecting an input type. The syntax (inspired by TypeScript) is similar to a ternary expression:","markups":[{"type":3,"start":0,"end":17,"href":"https://flow.org/en/docs/types/conditional/","title":"","rel":"noopener","anchorType":0}]},{"name":"357a","type":8,"text":"type T = CheckType extends ExtendsType ? TrueType : FalseType;","markups":[],"codeBlockMetadata":{"mode":2,"lang":"typescript"}},{"name":"a6dd","type":1,"text":"If CheckType is a subtype of ExtendsType, the result is TrueType, otherwise it…","markups":[{"type":10,"start":3,"end":12},{"type":10,"start":29,"end":40},{"type":10,"start":56,"end":64},{"type":10,"start":82,"end":91}]}],"sections":[{"name":"6fdc","startIndex":0}]},"isFullContent":false,"subtitle":"Conditional types allow you to choose between two different output types by inspecting an input type. The syntax (inspired by TypeScript)…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},{"id":"3ef41567ff3e","versionId":"6b2a529e8b85","creatorId":"95a4c0399e1f","homeCollectionId":"ab067ae921ed","title":"New type casting syntax for Flow: “as”","detectedLanguage":"en","latestVersion":"6b2a529e8b85","latestPublishedVersion":"6b2a529e8b85","hasUnpublishedEdits":false,"latestRev":153,"createdAt":1707247466056,"updatedAt":1709076667824,"acceptedAt":0,"firstPublishedAt":1707248106704,"latestPublishedAt":1709076667824,"vote":false,"experimentalCss":"","displayAuthor":"","virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*Qz7Vz1kppEptexmWxwn8ww.png","filter":"","backgroundSize":"","originalWidth":344,"originalHeight":256,"strategy":"resample","height":0,"width":0},"wordCount":294,"imageCount":1,"readingTime":1.3094339622641509,"subtitle":"To make it easier for new users to get started with Flow, we’re updating our type casting syntax to use “as”, like TypeScript, Hack, Swift…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":10,"isBookmarked":false,"tags":[{"slug":"javascript","name":"JavaScript","postCount":295043,"metadata":{"postCount":295043,"coverImage":{"id":"1*4Ora6QBxIHjwn85Hy-DbSA.png","originalWidth":5834,"originalHeight":1775,"isFeatured":true}},"type":"Tag"},{"slug":"flowtype","name":"Flowtype","postCount":200,"metadata":{"postCount":200,"coverImage":{"id":"1*W5e7CK14sPqWZnLJhvaCCw.gif","originalWidth":1200,"originalHeight":768,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://flow.org/en/docs/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/tools/eslint/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/tools/babel/","alts":[],"httpStatus":200},{"url":"https://www.npmjs.com/package/babel-plugin-syntax-hermes-parser","alts":[],"httpStatus":200},{"url":"https://www.npmjs.com/package/flow-upgrade","alts":[],"httpStatus":200},{"url":"https://www.npmjs.com/package/hermes-eslint","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1709076668106},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":131,"sectionCount":1,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"new-type-casting-syntax-for-flow-as","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"new-type-casting-syntax-for-flow-as-3ef41567ff3e","previewContent":{"bodyModel":{"paragraphs":[{"name":"95fe","type":4,"text":"","markups":[],"layout":9,"metadata":{"id":"1*Qz7Vz1kppEptexmWxwn8ww.png","originalWidth":344,"originalHeight":256}},{"name":"0239","type":3,"text":"New type casting syntax for Flow: “as”","markups":[],"alignment":1},{"name":"5b06","type":1,"text":"To make it easier for new users to get started with Flow, we’re updating our type casting…","markups":[{"type":3,"start":52,"end":56,"href":"https://flow.org/en/docs/","title":"","rel":"","anchorType":0}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"To make it easier for new users to get started with Flow, we’re updating our type casting syntax to use “as”, like TypeScript, Hack, Swift…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"ab067ae921ed","isNewsletter":false,"newsletterId":"9b8e3e351150","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"95fe","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*Qz7Vz1kppEptexmWxwn8ww.png","originalWidth":344,"originalHeight":256}},{"name":"0239","type":3,"text":"New type casting syntax for Flow: “as”","markups":[]},{"name":"5b06","type":1,"text":"To make it easier for new users to get started with Flow, we’re updating our type casting syntax to use “as”, like TypeScript, Hack, Swift, and others. Say goodbye to the old colon-and-parens syntax:","markups":[{"type":3,"start":52,"end":56,"href":"https://flow.org/en/docs/","title":"","rel":"","anchorType":0}]},{"name":"e156","type":8,"text":"// Before:\n(1: number);\n// After:\n1 as number;","markups":[],"codeBlockMetadata":{"mode":2,"lang":"typescript"}},{"name":"3ada","type":3,"text":"It’s safe, unlike TypeScript","markups":[]},{"name":"e97b","type":1,"text":"Our new type casting syntax behaves just…","markups":[]}],"sections":[{"name":"4220","startIndex":0}]},"isFullContent":false,"subtitle":"To make it easier for new users to get started with Flow, we’re updating our type casting syntax to use “as”, like TypeScript, Hack, Swift…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},{"id":"5da5e4831b5e","versionId":"70bcc5f9f2e5","creatorId":"95a4c0399e1f","homeCollectionId":"ab067ae921ed","title":"Improved Flow Docs and Try Flow","detectedLanguage":"en","latestVersion":"70bcc5f9f2e5","latestPublishedVersion":"70bcc5f9f2e5","hasUnpublishedEdits":false,"latestRev":78,"createdAt":1695148801888,"updatedAt":1695187456178,"acceptedAt":0,"firstPublishedAt":1695149206965,"latestPublishedAt":1695149692801,"vote":false,"experimentalCss":"","displayAuthor":"","virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*-FY6CARAa-bToGpo","filter":"","backgroundSize":"","originalWidth":1600,"originalHeight":868,"strategy":"resample","height":0,"width":0},"wordCount":195,"imageCount":2,"readingTime":1.119182389937107,"subtitle":"We’ve refreshed our documentation, and added the ability to configure options and lints in Try Flow!","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":4,"isBookmarked":false,"tags":[{"slug":"flow","name":"Flow","postCount":8349,"metadata":{"postCount":8349,"coverImage":{"id":"1*2xsd0z9fe5HIM_HMhCCV8A.png","originalWidth":1000,"originalHeight":630,"isFeatured":true}},"type":"Tag"},{"slug":"flowtype","name":"Flowtype","postCount":200,"metadata":{"postCount":200,"coverImage":{"id":"1*W5e7CK14sPqWZnLJhvaCCw.gif","originalWidth":1200,"originalHeight":768,"isFeatured":true}},"type":"Tag"},{"slug":"javascript","name":"JavaScript","postCount":295043,"metadata":{"postCount":295043,"coverImage":{"id":"1*4Ora6QBxIHjwn85Hy-DbSA.png","originalWidth":5834,"originalHeight":1775,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://flow.org/try/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/lang/type-hierarchy/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/lang/refinements/","alts":[],"httpStatus":200},{"url":"https://docusaurus.io/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/","alts":[],"httpStatus":200},{"url":"https://medium.com/flow-type/exact-object-types-by-default-by-default-cc559af6f69","alts":[{"type":3,"url":"medium://p/cc559af6f69"},{"type":2,"url":"medium://p/cc559af6f69"}],"httpStatus":200}],"version":"0.3","generatedAt":1695149693751},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":105,"sectionCount":1,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"improved-flow-docs-and-try-flow","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"improved-flow-docs-and-try-flow-5da5e4831b5e","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*-FY6CARAa-bToGpo","originalWidth":1600,"originalHeight":868,"isFeatured":true}},{"name":"4082","type":3,"text":"Improved Flow Docs and Try Flow","markups":[],"alignment":1},{"name":"ed19","type":1,"text":"We’ve refreshed our documentation, and added the ability to configure options and lints in Try Flow!","markups":[{"type":3,"start":20,"end":33,"href":"https://flow.org/en/docs/","title":"","rel":"","anchorType":0},{"type":3,"start":91,"end":99,"href":"https://flow.org/try/","title":"","rel":"nofollow noreferrer noopener","anchorType":0}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"We’ve refreshed our documentation, and added the ability to configure options and lints in Try Flow!"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"ab067ae921ed","isNewsletter":false,"newsletterId":"555968900979","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"4082","type":3,"text":"Improved Flow Docs and Try Flow","markups":[]},{"name":"ed19","type":1,"text":"We’ve refreshed our documentation, and added the ability to configure options and lints in Try Flow!","markups":[{"type":3,"start":20,"end":33,"href":"https://flow.org/en/docs/","title":"","rel":"","anchorType":0},{"type":3,"start":91,"end":99,"href":"https://flow.org/try/","title":"","rel":"nofollow noreferrer noopener","anchorType":0}]},{"name":"4827","type":13,"text":"Documentation","markups":[]},{"name":"e345","type":1,"text":"Over the past 6 months, we’ve reviewed and updated almost every page of our documentation, and added new docs for features previously missing. If you’ve looked at our docs in the past and found…","markups":[{"type":3,"start":76,"end":89,"href":"https://flow.org/en/docs/","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"2090","startIndex":0}]},"isFullContent":false,"subtitle":"We’ve refreshed our documentation, and added the ability to configure options and lints in Try Flow!"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},{"id":"ff4d7f11c50a","versionId":"b64760230e01","creatorId":"95a4c0399e1f","homeCollectionId":"ab067ae921ed","title":"Announcing 5 new Flow tuple type features","detectedLanguage":"en","latestVersion":"b64760230e01","latestPublishedVersion":"b64760230e01","hasUnpublishedEdits":false,"latestRev":111,"createdAt":1692300805463,"updatedAt":1692332170100,"acceptedAt":0,"firstPublishedAt":1692302182605,"latestPublishedAt":1692302182605,"vote":false,"experimentalCss":"","displayAuthor":"","virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":743,"imageCount":0,"readingTime":2.8037735849056604,"subtitle":"Labeled tuple elements, read-only tuples, optional tuple elements, tuple spread, and more.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":2,"isBookmarked":false,"tags":[{"slug":"flowtype","name":"Flowtype","postCount":200,"metadata":{"postCount":200,"coverImage":{"id":"1*W5e7CK14sPqWZnLJhvaCCw.gif","originalWidth":1200,"originalHeight":768,"isFeatured":true}},"type":"Tag"},{"slug":"javascript","name":"JavaScript","postCount":295043,"metadata":{"postCount":295043,"coverImage":{"id":"1*4Ora6QBxIHjwn85Hy-DbSA.png","originalWidth":5834,"originalHeight":1775,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://flow.org/en/docs/lang/variance/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/tools/eslint/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/tuples/","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/tools/babel/","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1692302182980},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":51,"sectionCount":1,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"announcing-5-new-flow-tuple-type-features","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"announcing-5-new-flow-tuple-type-features-ff4d7f11c50a","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewTitle","type":3,"text":"Announcing 5 new Flow tuple type features","alignment":1},{"name":"previewSubtitle","type":13,"text":"Labeled tuple elements, read-only tuples, optional tuple elements, tuple spread, and more.","alignment":1},{"name":"previewSnippet0","type":1,"text":"Tuples are a lighter weight alternative to objects when you want to group data…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Labeled tuple elements, read-only tuples, optional tuple elements, tuple spread, and more."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"ab067ae921ed","isNewsletter":false,"newsletterId":"fe3db99734af","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"0c43","type":3,"text":"Announcing 5 new Flow tuple type features","markups":[]},{"name":"c522","type":1,"text":"Tuples are a lighter weight alternative to objects when you want to group data, by using positions rather than property names to distinguish elements. However, tuple types have lacked many useful features object types provide - until now!","markups":[]},{"name":"ce76","type":10,"text":"Labeled tuple elements: type T = [foo: number, bar: string]","markups":[{"type":10,"start":24,"end":59}]},{"name":"9def","type":10,"text":"Variance (read-only/write-only)…","markups":[{"type":10,"start":64,"end":101}]}],"sections":[{"name":"ee3e","startIndex":0}]},"isFullContent":false,"subtitle":"Labeled tuple elements, read-only tuples, optional tuple elements, tuple spread, and more."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},{"id":"b49341256640","versionId":"406cf1fdb6b1","creatorId":"5fee5a0ae64","homeCollectionId":"ab067ae921ed","title":"Flow can now detect unused Promises","detectedLanguage":"en","latestVersion":"406cf1fdb6b1","latestPublishedVersion":"406cf1fdb6b1","hasUnpublishedEdits":false,"latestRev":231,"createdAt":1681158145053,"updatedAt":1681162194869,"acceptedAt":0,"firstPublishedAt":1681161721990,"latestPublishedAt":1681162192596,"vote":false,"experimentalCss":"","displayAuthor":"","virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":320,"imageCount":0,"readingTime":1.2075471698113207,"subtitle":"Flow can now lint against unused/floating Promises. Unused promises can be dangerous, because errors are potentially unhandled, and the…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":2,"isBookmarked":false,"tags":[{"slug":"flowtype","name":"Flowtype","postCount":200,"metadata":{"postCount":200,"coverImage":{"id":"1*W5e7CK14sPqWZnLJhvaCCw.gif","originalWidth":1200,"originalHeight":768,"isFeatured":true}},"type":"Tag"},{"slug":"javascript","name":"JavaScript","postCount":295043,"metadata":{"postCount":295043,"coverImage":{"id":"1*4Ora6QBxIHjwn85Hy-DbSA.png","originalWidth":5834,"originalHeight":1775,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://flow.org/en/docs/linting/","alts":[],"httpStatus":200},{"url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1681162192895},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":51,"sectionCount":1,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"flow-can-now-detect-unused-promises","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"flow-can-now-detect-unused-promises-b49341256640","previewContent":{"bodyModel":{"paragraphs":[{"name":"f0ad","type":3,"text":"Flow can now detect unused Promises","markups":[],"alignment":1},{"name":"7061","type":1,"text":"As of v0.201.0, Flow can now lint against unused/floating Promises. Unused promises can be dangerous, because errors are potentially unhandled, and the code may not execute in the intended order. They are usually mistakes that Flow is perfectly positioned to warn you…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Flow can now lint against unused/floating Promises. Unused promises can be dangerous, because errors are potentially unhandled, and the…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"ab067ae921ed","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"f0ad","type":3,"text":"Flow can now detect unused Promises","markups":[]},{"name":"7061","type":1,"text":"As of v0.201.0, Flow can now lint against unused/floating Promises. Unused promises can be dangerous, because errors are potentially unhandled, and the code may not execute in the intended order. They are usually mistakes that Flow is perfectly positioned to warn you about.","markups":[]},{"name":"5a1a","type":1,"text":"A promise can be “used” by…","markups":[]},{"name":"ae46","type":9,"text":"awaiting…","markups":[{"type":10,"start":0,"end":5}]}],"sections":[{"name":"cd6c","startIndex":0}]},"isFullContent":false,"subtitle":"Flow can now lint against unused/floating Promises. Unused promises can be dangerous, because errors are potentially unhandled, and the…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},{"id":"3a32f0bf2a20","versionId":"46a56929ae4","creatorId":"95a4c0399e1f","homeCollectionId":"ab067ae921ed","title":"Announcing Partial & Required Flow utility types + catch annotations","detectedLanguage":"en","latestVersion":"46a56929ae4","latestPublishedVersion":"46a56929ae4","hasUnpublishedEdits":false,"latestRev":106,"createdAt":1678908797176,"updatedAt":1678954483742,"acceptedAt":0,"firstPublishedAt":1678910576785,"latestPublishedAt":1678910576785,"vote":false,"experimentalCss":"","displayAuthor":"","virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*iAWZHLO6O7pSAxP079bUcg.png","filter":"","backgroundSize":"","originalWidth":1280,"originalHeight":720,"strategy":"resample","height":0,"width":0},"wordCount":564,"imageCount":1,"readingTime":2.328301886792453,"subtitle":"Starting in Flow version 0.201, make an object type’s fields all optional using Partial\x3cObjType\x3e (use instead of the unsafe $Shape), and…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":4,"isBookmarked":false,"tags":[{"slug":"flowtype","name":"Flowtype","postCount":200,"metadata":{"postCount":200,"coverImage":{"id":"1*W5e7CK14sPqWZnLJhvaCCw.gif","originalWidth":1200,"originalHeight":768,"isFeatured":true}},"type":"Tag"},{"slug":"javascript","name":"JavaScript","postCount":295043,"metadata":{"postCount":295043,"coverImage":{"id":"1*4Ora6QBxIHjwn85Hy-DbSA.png","originalWidth":5834,"originalHeight":1775,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://flow.org/en/docs/config/options/#toc-use-mixed-in-catch-variables","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/utilities/#toc-required","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/types/utilities/#toc-partial","alts":[],"httpStatus":200},{"url":"https://www.npmjs.com/package/flow-upgrade","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1678910578111},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":54,"sectionCount":1,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"announcing-partial-required-flow-utility-types-catch-annotations","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"announcing-partial-required-flow-utility-types-catch-annotations-3a32f0bf2a20","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*iAWZHLO6O7pSAxP079bUcg.png","originalWidth":1280,"originalHeight":720,"isFeatured":true}},{"name":"b12c","type":3,"text":"Announcing Partial & Required Flow utility types + catch annotations","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Starting in Flow version 0.201, make an object type’s fields all optional using Partial\x3cObjType\x3e (use instead of the unsafe $Shape), and…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"ab067ae921ed","isNewsletter":false,"newsletterId":"5d65c94b52ac","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":3,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"primaryTopicId":"63c6f1f93ee","isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"0fd6","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*iAWZHLO6O7pSAxP079bUcg.png","originalWidth":1280,"originalHeight":720,"isFeatured":true}},{"name":"b12c","type":3,"text":"Announcing Partial & Required Flow utility types + catch annotations","markups":[]},{"name":"b496","type":1,"text":"Starting in Flow version 0.201, make an object type’s fields all optional using Partial\x3cObjType\x3e (use instead of the unsafe $Shape), and make an object type’s optional fields required with Required\x3cObjType\x3e. Also, you can now annotate a catch variable with mixed.","markups":[{"type":10,"start":80,"end":96},{"type":10,"start":124,"end":130},{"type":10,"start":189,"end":206},{"type":10,"start":237,"end":242},{"type":10,"start":257,"end":262}]},{"name":"00d0","type":3,"text":"Partial\x3cT\x3e","markups":[]},{"name":"86f6","type":1,"text":"The Partial utility type converts all of an object or…","markups":[{"type":10,"start":4,"end":11},{"type":3,"start":4,"end":11,"href":"https://flow.org/en/docs/types/utilities/#toc-partial","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"320d","startIndex":0}]},"isFullContent":false,"subtitle":"Starting in Flow version 0.201, make an object type’s fields all optional using Partial\x3cObjType\x3e (use instead of the unsafe $Shape), and…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},{"id":"cc559af6f69","versionId":"ed1a123054b9","creatorId":"95a4c0399e1f","homeCollectionId":"ab067ae921ed","title":"Exact object types by default, by default","detectedLanguage":"en","latestVersion":"ed1a123054b9","latestPublishedVersion":"ed1a123054b9","hasUnpublishedEdits":false,"latestRev":68,"createdAt":1676570547821,"updatedAt":1676607360562,"acceptedAt":0,"firstPublishedAt":1676570829644,"latestPublishedAt":1676571191614,"vote":false,"experimentalCss":"","displayAuthor":"","virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":498,"imageCount":0,"readingTime":1.879245283018868,"subtitle":"We announced 5 years ago a plan to eventually make exact object types the default. We are now proceeding with this plan. Starting with Flow…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":5,"isBookmarked":false,"tags":[{"slug":"flowtype","name":"Flowtype","postCount":200,"metadata":{"postCount":200,"coverImage":{"id":"1*W5e7CK14sPqWZnLJhvaCCw.gif","originalWidth":1200,"originalHeight":768,"isFeatured":true}},"type":"Tag"},{"slug":"javascript","name":"JavaScript","postCount":295043,"metadata":{"postCount":295043,"coverImage":{"id":"1*4Ora6QBxIHjwn85Hy-DbSA.png","originalWidth":5834,"originalHeight":1775,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://flow.org/en/docs/types/objects/#toc-exact-object-types","alts":[],"httpStatus":200},{"url":"https://www.npmjs.com/package/flow-upgrade","alts":[],"httpStatus":200},{"url":"https://flow.org/en/docs/linting/rule-reference/#toc-implicit-inexact-object","alts":[],"httpStatus":200},{"url":"https://medium.com/flow-type/how-to-upgrade-to-exact-by-default-object-type-syntax-7aa44b4d08ab","alts":[{"type":3,"url":"medium://p/7aa44b4d08ab"},{"type":2,"url":"medium://p/7aa44b4d08ab"}],"httpStatus":200},{"url":"https://flow.org/en/docs/config/options/#toc-exact-by-default-boolean","alts":[],"httpStatus":200},{"url":"https://medium.com/flow-type/on-the-roadmap-exact-objects-by-default-16b72933c5cf","alts":[{"type":2,"url":"medium://p/16b72933c5cf"},{"type":3,"url":"medium://p/16b72933c5cf"}],"httpStatus":200}],"version":"0.3","generatedAt":1676571191803},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":71,"sectionCount":1,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"exact-object-types-by-default-by-default","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"exact-object-types-by-default-by-default-cc559af6f69","previewContent":{"bodyModel":{"paragraphs":[{"name":"f249","type":3,"text":"Exact object types by default, by default","markups":[],"alignment":1},{"name":"3b52","type":1,"text":"We announced 5 years ago a plan to eventually make exact object types the default. We are now proceeding with this plan. Starting with Flow 0.200, you must explicitly set either exact_by_default=true or exact_by_default=false in the [options] section of…","markups":[{"type":10,"start":178,"end":199},{"type":10,"start":203,"end":225},{"type":10,"start":233,"end":242},{"type":3,"start":3,"end":24,"href":"https://medium.com/flow-type/on-the-roadmap-exact-objects-by-default-16b72933c5cf","title":"","rel":"","anchorType":0},{"type":3,"start":51,"end":69,"href":"https://flow.org/en/docs/types/objects/#toc-exact-object-types","title":"","rel":"noopener","anchorType":0},{"type":3,"start":74,"end":81,"href":"https://flow.org/en/docs/config/options/#toc-exact-by-default-boolean","title":"","rel":"noopener","anchorType":0}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"We announced 5 years ago a plan to eventually make exact object types the default. We are now proceeding with this plan. Starting with Flow…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"ab067ae921ed","isNewsletter":false,"newsletterId":"53e16a505edd","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"f249","type":3,"text":"Exact object types by default, by default","markups":[]},{"name":"3b52","type":1,"text":"We announced 5 years ago a plan to eventually make exact object types the default. We are now proceeding with this plan. Starting with Flow 0.200, you must explicitly set either exact_by_default=true or exact_by_default=false in the [options] section of your .flowconfig, as we have eliminated the default value (which was…","markups":[{"type":10,"start":178,"end":199},{"type":10,"start":203,"end":225},{"type":10,"start":233,"end":242},{"type":10,"start":259,"end":270},{"type":10,"start":323,"end":328},{"type":10,"start":398,"end":419},{"type":3,"start":3,"end":24,"href":"https://medium.com/flow-type/on-the-roadmap-exact-objects-by-default-16b72933c5cf","title":"","rel":"","anchorType":0},{"type":3,"start":51,"end":69,"href":"https://flow.org/en/docs/types/objects/#toc-exact-object-types","title":"","rel":"noopener","anchorType":0},{"type":3,"start":74,"end":81,"href":"https://flow.org/en/docs/config/options/#toc-exact-by-default-boolean","title":"","rel":"noopener","anchorType":0}]}],"sections":[{"name":"818f","startIndex":0}]},"isFullContent":false,"subtitle":"We announced 5 years ago a plan to eventually make exact object types the default. We are now proceeding with this plan. Starting with Flow…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"}],"tagName":null,"writerNames":["darichey","jordanbrown215","gkz","marshallroch","samzhou","michaelmatsonvitousek","alexmckenley"]}) // ]]></script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'92e66aa61fe28a13',t:'MTc0NDMzMTg1OS4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10