From 1c728c2db7ba90390c48123ce2550d57278f50aa Mon Sep 17 00:00:00 2001 From: Josh-Cena Date: Thu, 18 Apr 2024 06:43:26 +0000 Subject: [PATCH] deploy: 370e5b11ae3bfb8ea33a2e9e07c4242d8532ad7b --- 404.html | 12 ++++++------ assets/css/styles.86866bfc.css | 1 + assets/css/styles.ad3c40c9.css | 1 - assets/js/01c27ace.23b54a50.js | 1 - assets/js/01c27ace.579bc391.js | 1 + assets/js/17896441.a3992cc8.js | 1 + assets/js/17896441.b874c847.js | 1 - assets/js/1be78505.52d4923f.js | 1 + assets/js/1be78505.eabfa853.js | 1 - assets/js/287.2af51d35.js | 1 - assets/js/2bc78064.4452a6cd.js | 1 + assets/js/2bc78064.d00ebaad.js | 1 - assets/js/374a3bb4.11b183b7.js | 1 - assets/js/374a3bb4.2a9643db.js | 1 + assets/js/3c9c65c3.19c67f7a.js | 1 + assets/js/3c9c65c3.ef214b93.js | 1 - .../{4f9f7239.4920c2ed.js => 4f9f7239.afa264a0.js} | 2 +- assets/js/5b478ae0.358546da.js | 1 + assets/js/5b478ae0.cb3fa351.js | 1 - assets/js/840.34a9129d.js | 1 + assets/js/935f2afb.65247dfd.js | 1 - assets/js/935f2afb.8e29971d.js | 1 + assets/js/b7550edf.5eaaa9c7.js | 1 + assets/js/b7550edf.b6242072.js | 1 - assets/js/bfb0a607.3081a224.js | 1 - assets/js/bfb0a607.4a96c4c0.js | 1 + assets/js/ce13fc4a.1c5579d8.js | 1 + assets/js/ce13fc4a.b035076d.js | 1 - assets/js/d3bef8cd.41fdac5a.js | 1 + assets/js/d3bef8cd.d4cc144c.js | 1 - assets/js/db113458.312ca28b.js | 1 - assets/js/db113458.cdca499b.js | 1 + assets/js/dea8086e.3b4975b2.js | 1 - assets/js/dea8086e.7002aa18.js | 1 + assets/js/e82d795c.845b5ab5.js | 1 - assets/js/e82d795c.c2b5daee.js | 1 + assets/js/ec400d68.0e864000.js | 1 - assets/js/ec400d68.6a7c51e4.js | 1 + assets/js/edaa7221.ba780c1b.js | 1 + assets/js/edaa7221.c16708a9.js | 1 - assets/js/f41ee608.0d9908d9.js | 1 - assets/js/f41ee608.4cb596f6.js | 1 + assets/js/main.292bf4a6.js | 2 ++ ...7.js.LICENSE.txt => main.292bf4a6.js.LICENSE.txt} | 0 assets/js/main.60ee5147.js | 2 -- assets/js/runtime~main.30028526.js | 1 + assets/js/runtime~main.57fc8836.js | 1 - eslint-base/async/index.html | 12 ++++++------ eslint-base/collections/index.html | 12 ++++++------ eslint-base/control-flow/index.html | 12 ++++++------ eslint-base/formatting/index.html | 12 ++++++------ eslint-base/functions/index.html | 12 ++++++------ eslint-base/index.html | 12 ++++++------ eslint-base/literals/index.html | 12 ++++++------ eslint-base/modules/index.html | 12 ++++++------ eslint-base/objects-classes/index.html | 12 ++++++------ eslint-base/operators/index.html | 12 ++++++------ eslint-base/variables-names/index.html | 12 ++++++------ index.html | 12 ++++++------ typescript/base/index.html | 12 ++++++------ typescript/index.html | 12 ++++++------ typescript/type-checked/index.html | 12 ++++++------ 62 files changed, 120 insertions(+), 120 deletions(-) create mode 100644 assets/css/styles.86866bfc.css delete mode 100644 assets/css/styles.ad3c40c9.css delete mode 100644 assets/js/01c27ace.23b54a50.js create mode 100644 assets/js/01c27ace.579bc391.js create mode 100644 assets/js/17896441.a3992cc8.js delete mode 100644 assets/js/17896441.b874c847.js create mode 100644 assets/js/1be78505.52d4923f.js delete mode 100644 assets/js/1be78505.eabfa853.js delete mode 100644 assets/js/287.2af51d35.js create mode 100644 assets/js/2bc78064.4452a6cd.js delete mode 100644 assets/js/2bc78064.d00ebaad.js delete mode 100644 assets/js/374a3bb4.11b183b7.js create mode 100644 assets/js/374a3bb4.2a9643db.js create mode 100644 assets/js/3c9c65c3.19c67f7a.js delete mode 100644 assets/js/3c9c65c3.ef214b93.js rename assets/js/{4f9f7239.4920c2ed.js => 4f9f7239.afa264a0.js} (63%) create mode 100644 assets/js/5b478ae0.358546da.js delete mode 100644 assets/js/5b478ae0.cb3fa351.js create mode 100644 assets/js/840.34a9129d.js delete mode 100644 assets/js/935f2afb.65247dfd.js create mode 100644 assets/js/935f2afb.8e29971d.js create mode 100644 assets/js/b7550edf.5eaaa9c7.js delete mode 100644 assets/js/b7550edf.b6242072.js delete mode 100644 assets/js/bfb0a607.3081a224.js create mode 100644 assets/js/bfb0a607.4a96c4c0.js create mode 100644 assets/js/ce13fc4a.1c5579d8.js delete mode 100644 assets/js/ce13fc4a.b035076d.js create mode 100644 assets/js/d3bef8cd.41fdac5a.js delete mode 100644 assets/js/d3bef8cd.d4cc144c.js delete mode 100644 assets/js/db113458.312ca28b.js create mode 100644 assets/js/db113458.cdca499b.js delete mode 100644 assets/js/dea8086e.3b4975b2.js create mode 100644 assets/js/dea8086e.7002aa18.js delete mode 100644 assets/js/e82d795c.845b5ab5.js create mode 100644 assets/js/e82d795c.c2b5daee.js delete mode 100644 assets/js/ec400d68.0e864000.js create mode 100644 assets/js/ec400d68.6a7c51e4.js create mode 100644 assets/js/edaa7221.ba780c1b.js delete mode 100644 assets/js/edaa7221.c16708a9.js delete mode 100644 assets/js/f41ee608.0d9908d9.js create mode 100644 assets/js/f41ee608.4cb596f6.js create mode 100644 assets/js/main.292bf4a6.js rename assets/js/{main.60ee5147.js.LICENSE.txt => main.292bf4a6.js.LICENSE.txt} (100%) delete mode 100644 assets/js/main.60ee5147.js create mode 100644 assets/js/runtime~main.30028526.js delete mode 100644 assets/js/runtime~main.57fc8836.js diff --git a/404.html b/404.html index 4f14338..609272d 100644 --- a/404.html +++ b/404.html @@ -3,14 +3,14 @@ -Page Not Found | JC-verse style guide - - +Page Not Found | JC-verse style guide + +
-
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + \ No newline at end of file diff --git a/assets/css/styles.86866bfc.css b/assets/css/styles.86866bfc.css new file mode 100644 index 0000000..a79a428 --- /dev/null +++ b/assets/css/styles.86866bfc.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.menu,.navbar-sidebar{overflow-x:hidden}.clean-list,.containsTaskList_QWGu,.details_IpIu>summary,.dropdown__menu,.menu__list{list-style:none}.toggleButton_MMFG,html{-webkit-tap-highlight-color:transparent}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,.05);--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 rgba(0,0,0,.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1);--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:rgba(0,0,0,.03);--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#08827e;--ifm-color-primary-dark:#077571;--ifm-color-primary-darker:#076f6b;--ifm-color-primary-darkest:#065b58;--ifm-color-primary-light:#098f8b;--ifm-color-primary-lighter:#099591;--ifm-color-primary-lightest:#0aa9a4;--ifm-code-font-size:95%;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1);--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:transparent}*{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}code,pre.shiki>.code-title{font-size:var(--ifm-code-font-size)}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none,.tabItem_l0OV{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_BiEj,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:transparent;border:none;font-size:100%;line-height:inherit;padding:0;-webkit-overflow-scrolling:touch;white-space:pre}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul,.tabList_J5MA{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,pre .inline-completions ul.dropdown li span.result-found{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_P5_N,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53,120,229,.15);--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:rgba(235,237,240,.15);--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:rgba(0,164,0,.15);--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:rgba(84,199,236,.15);--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:rgba(255,186,0,.15);--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:rgba(250,56,62,.15);--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area.breadcrumbs__link[href]:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:transparent;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor transparent;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_tjFy article>:first-child,.docItemContainer_tjFy header+*,.footer__item{margin-top:0}.admonitionContent_yySL>:last-child,.cardContainer_H47c :last-child,.collapsibleContent_Fd2D>:last-child,.footer__items,.tabItem_wHwb>:last-child{margin-bottom:0}[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_IpIu[data-collapsed=false].isBrowser_QD4r>summary:before,.details_IpIu[open]:not(.isBrowser_QD4r)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;transition-timing-function:ease-in-out;top:0;left:0;visibility:hidden}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter);content:""}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.docsWrapper_ct1J,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_t7IR,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:hsla(0,0%,100%,.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:hsla(0,0%,100%,.05);--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);position:fixed;transform:translate3d(-100%,0,0);transition-duration:.25s;transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);position:fixed;right:0;transition-duration:.1s;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.tabs__item:hover,pre.shiki:hover div.highlight{background-color:var(--ifm-hover-overlay)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.hash-link,pre.shiki .copy-button{opacity:0;-webkit-user-select:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover,pre code a{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto;padding-left:0}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,.05);--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:hsla(0,0%,100%,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:hsla(0,0%,100%,.07);--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec;--ifm-color-primary:#39cac4;--ifm-color-primary-dark:#31b8b2;--ifm-color-primary-darker:#2eaea8;--ifm-color-primary-darkest:#268f8b;--ifm-color-primary-light:#4dcfca;--ifm-color-primary-lighter:#58d2cd;--ifm-color-primary-lightest:#76dad6}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.docusaurus-highlight-code-line{background-color:rgba(0,0,0,.1);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}html[data-theme=dark] .docusaurus-highlight-code-line{background-color:rgba(0,0,0,.3)}[data-theme=dark] .shiki.github-light,[data-theme=light] .shiki.github-dark,pre .error .code,pre.shiki .language-id{display:none}.iconEdit_bHB7{margin-right:.3em;vertical-align:sub}.tag_otG2{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_otG2:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_s0E1{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_PGyn{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_PGyn:after,.tagWithCount_PGyn:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_PGyn:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_PGyn:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_PGyn span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_Ow0B{display:inline}.tag_DFxh{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_pbO5{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_iI2p{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_iI2p:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_cHjC:after,.tocCollapsibleExpanded_BbRn{transform:none}.tocCollapsible_wXna{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vea0>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vea0 ul li{margin:.4rem .8rem}.tocCollapsibleContent_vea0 a{display:block}.tableOfContents_XG6w{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.anchorWithStickyNavbar_JmGV{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_pMLv{scroll-margin-top:.5rem}.hash-link{padding-left:.5rem;transition:opacity var(--ifm-transition-fast);user-select:none}.hash-link:before{content:"#"}.copy-button:focus,.footerLogoLink_tutC:hover,.hash-link:focus,:hover>.hash-link,pre.shiki:hover>.copy-button{opacity:1}pre.shiki>.code-title{align-items:center;border-bottom:1px solid var(--ifm-color-emphasis-300);color:var(--ifm-color-emphasis-900);display:flex;font-family:var(--ifm-font-family-base);font-weight:500;height:2.5rem;left:0;padding:0 var(--ifm-pre-padding);position:absolute;right:0;top:0;width:100%}pre.shiki.with-title{padding-top:2.5rem}pre.shiki .copy-button{-webkit-appearance:none;appearance:none;background:rgba(0,0,0,.3);border:none;border-radius:var(--ifm-global-radius);color:var(--ifm-color-white);cursor:pointer;padding:.4rem .5rem;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2);transition:opacity .2s ease-in-out;user-select:none}pre.shiki.with-title .copy-button{top:calc(2.5rem + var(--ifm-pre-padding)/ 2)}pre.shiki{overflow:visible;padding:0;position:relative;border:1px solid transparent}pre.shiki div.line,pre.shiki div.meta-line{padding-left:var(--ifm-pre-padding);padding-right:var(--ifm-pre-padding)}pre.shiki>.code-container{padding:var(--ifm-pre-padding) 0}[data-theme=light] pre.shiki{border-color:var(--ifm-color-emphasis-300)}pre.shiki:hover .dim{filter:none;opacity:1}pre.shiki div.dim{filter:grayscale(1);opacity:.5;transition:opacity .2s ease-in-out}pre.shiki div.dim,pre.shiki div.highlight{border-left:2px solid transparent;margin:0}pre.shiki div.highlight{opacity:1;transition:background-color .2s ease-in-out}pre.shiki:hover div.highlight{border-left:2px solid var(--ifm-color-primary);width:100%}pre.shiki div.line{min-height:1rem}pre.twoslash:hover data-lsp{border-color:var(--ifm-color-emphasis-400)}pre.twoslash data-lsp:hover:before{background-color:#3f3f3f;border-radius:2px;color:#fff;content:attr(lsp);font-size:85%;padding:5px 8px;position:absolute;text-align:left;transform:translateY(1.5rem);white-space:pre-wrap;z-index:100}pre .code-container{overflow:auto}pre data-err{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='3' width='6'%3E%3Cg fill='%23c94824'%3E%3Cpath d='m5.5 0-3 3H1.1l3-3z'/%3E%3Cpath d='m4 0 2 2V.6L5.4 0zM0 2l1 1h1.4L0 .6z'/%3E%3C/g%3E%3C/svg%3E") 0 100% repeat-x;padding-bottom:3px}pre .query{color:var(--ifm-color-primary);display:inline-block;margin-bottom:10px}pre .error,pre .error-behind{display:block;margin-top:8px;padding:6px 6px 6px 14px;white-space:pre-wrap;width:100%}pre .error{align-items:center;background-color:#fee;border-left:2px solid var(--ifm-color-danger-dark);color:#000;display:flex;position:absolute}pre .error-behind{color:#fee;-webkit-user-select:none;user-select:none}pre .arrow{background-color:var(--ifm-color-emphasis-200);border-left:1px solid var(--ifm-color-emphasis-200);border-top:1px solid var(--ifm-color-emphasis-200);height:8px;margin-left:.1rem;position:relative;top:-7px;transform:translateY(25%) rotate(45deg);width:8px}pre .popover{border-radius:3px;margin-bottom:10px;margin-top:10px;padding:0 .5rem .3rem}pre .inline-completions ul.dropdown,pre .popover{background-color:var(--ifm-color-emphasis-200);display:inline-block}pre .inline-completions ul.dropdown{border-left:2px solid var(--ifm-color-primary);font-family:var(--code-font);margin:0 0 0 3px;padding:0;position:absolute;width:240px}pre .inline-completions ul.dropdown:before{background-color:var(--ifm-color-primary);content:" ";left:-2px;position:absolute;top:-1.2rem;width:2px}pre .inline-completions ul.dropdown li{margin-bottom:4px;overflow-x:hidden;padding-left:4px}pre .inline-completions ul.dropdown li.deprecated{text-decoration:line-through}pre .inline-completions ul.dropdown li span.result{color:#000;display:inline-block;width:100px}data-lsp{border-bottom:1px dotted transparent;transition:border-color .3s}.details_IpIu{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_IpIu>summary{cursor:pointer;padding-left:1rem;position:relative}.details_IpIu>summary::-webkit-details-marker{display:none}.details_IpIu>summary:before{border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_Fd2D{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_jERq{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}:not(.containsTaskList_QWGu>li)>.containsTaskList_QWGu{padding-left:0}.img_SS3x{height:auto}.admonition_uH4V{margin-bottom:1em}.admonitionHeading_P5_N{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem}.admonitionHeading_P5_N code{text-transform:none}.admonitionIcon_MF44{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_MF44 svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbsContainer_T5ub{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.breadcrumbHomeIcon_GlTw{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.cardContainer_H47c{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 rgba(0,0,0,.15);transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_H47c:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 rgba(0,0,0,.2)}.cardTitle_tTnA{font-size:1.2rem}.cardDescription_rTl4{font-size:.8rem}.skipToContent_oPtH{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_oPtH:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_J5rP{line-height:0;padding:0}.content_bSb_{font-size:85%;padding:5px 0;text-align:center}.content_bSb_ a{color:inherit;text-decoration:underline}.announcementBar_zJRd{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}#docusaurus-base-url-issue-banner-container,.collapseSidebarButton_oTwn,.docSidebarContainer_y0RQ,.sidebarLogo_CYvI,.themedImage_BQGR,[data-theme=dark] .lightToggleIcon_lgto,[data-theme=light] .darkToggleIcon_U96C,html[data-announcement-bar-initially-dismissed=true] .announcementBar_zJRd{display:none}.announcementBarPlaceholder_NpUd{flex:0 0 10px}.announcementBarClose_Jjdj{align-self:stretch;flex:0 0 30px}.toggle_ki11{height:2rem;width:2rem}.toggleButton_MMFG{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_MMFG:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_Uw7m{cursor:not-allowed}[data-theme=dark] .themedImage--dark_bGx0,[data-theme=light] .themedImage--light_HAxW{display:initial}.iconExternalLink_nPrP{margin-left:.3rem}.iconLanguage_kvP7{margin-right:5px;vertical-align:text-bottom}.navbarHideable_hhpl{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_nmcs{transform:translate3d(0,calc(-100% - 2px),0)}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.footerLogoLink_tutC{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.mainWrapper_MB5r{flex:1 0 auto}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.backToTopButton_iEvu{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_iEvu:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_DO8w{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:hsla(0,0%,100%,.05);--docusaurus-collapse-button-bg-hover:hsla(0,0%,100%,.1)}.docMainContainer_sTIZ,.docPage_KLoz{display:flex;width:100%}@media (min-width:997px){.collapseSidebarButton_oTwn,.expandButton_YOoA{background-color:var(--docusaurus-collapse-button-bg);position:sticky}.lastUpdated_pbO5{text-align:right}.tocMobile_Ojys{display:none}.docItemCol_Qr34{max-width:75%!important}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_Jjdj,.announcementBarPlaceholder_NpUd{flex-basis:50px}.searchBox_WqAV{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.collapseSidebarButton_oTwn{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px}.collapseSidebarButtonIcon_pMEX{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_GZLG,[dir=rtl] .collapseSidebarButtonIcon_pMEX{transform:rotate(0)}.collapseSidebarButton_oTwn:focus,.collapseSidebarButton_oTwn:hover,.expandButton_YOoA:focus,.expandButton_YOoA:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_OniL{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_jmj1{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_jmj1{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_YufC{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_CUen{display:flex;flex-direction:column;height:100%;max-height:100vh;padding-top:var(--ifm-navbar-height);position:sticky;top:0;transition:opacity 50ms;width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_w4KB{padding-top:0}.sidebarHidden_k6VE{height:0;opacity:0;overflow:hidden;visibility:hidden}.sidebarLogo_CYvI{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_CYvI img{height:2rem;margin-right:.5rem}.expandButton_YOoA{align-items:center;display:flex;height:100%;justify-content:center;max-height:100vh;top:0;transition:background-color var(--ifm-transition-fast) ease}[dir=rtl] .expandButtonIcon_GZLG{transform:rotate(180deg)}.docSidebarContainer_y0RQ{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_uArb{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.docMainContainer_sTIZ{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_iSjt{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_PxMR{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_Hewu,.footer__link-separator,.navbar__item,.tableOfContents_XG6w{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.docItemContainer_Tr6w{padding:0 .3rem}.searchBox_WqAV{position:absolute;right:var(--ifm-navbar-padding-horizontal)}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media (hover:hover){.backToTopButton_iEvu:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){data-lsp,pre .code-container>a,pre.shiki div.dim,pre.shiki div.highlight{transition:none}}@media print{.announcementBar_zJRd,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_Ojys{display:none}.tabs{page-break-inside:avoid}} \ No newline at end of file diff --git a/assets/css/styles.ad3c40c9.css b/assets/css/styles.ad3c40c9.css deleted file mode 100644 index 813d884..0000000 --- a/assets/css/styles.ad3c40c9.css +++ /dev/null @@ -1 +0,0 @@ -.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_MMFG,html{-webkit-tap-highlight-color:transparent}.menu,.navbar-sidebar{overflow-x:hidden}.clean-list,.containsTaskList_QWGu,.details_IpIu>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,.05);--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 rgba(0,0,0,.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1);--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:rgba(0,0,0,.03);--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#08827e;--ifm-color-primary-dark:#077571;--ifm-color-primary-darker:#076f6b;--ifm-color-primary-darkest:#065b58;--ifm-color-primary-light:#098f8b;--ifm-color-primary-lighter:#099591;--ifm-color-primary-lightest:#0aa9a4;--ifm-code-font-size:95%;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1);--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:transparent}*{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}code,pre.shiki>.code-title{font-size:var(--ifm-code-font-size)}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none,.tabItem_l0OV{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_BiEj,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:transparent;border:none;font-size:100%;line-height:inherit;padding:0;-webkit-overflow-scrolling:touch;white-space:pre}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul,.tabList_J5MA{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,pre .inline-completions ul.dropdown li span.result-found{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_P5_N,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53,120,229,.15);--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:rgba(235,237,240,.15);--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:rgba(0,164,0,.15);--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:rgba(84,199,236,.15);--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:rgba(255,186,0,.15);--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:rgba(250,56,62,.15);--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area.breadcrumbs__link[href]:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.hash-link,pre.shiki .copy-button{-webkit-user-select:none;opacity:0}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:transparent;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor transparent;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_tjFy article>:first-child,.docItemContainer_tjFy header+*,.footer__item{margin-top:0}.admonitionContent_yySL>:last-child,.cardContainer_H47c :last-child,.collapsibleContent_Fd2D>:last-child,.footer__items,.tabItem_wHwb>:last-child{margin-bottom:0}[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_IpIu[data-collapsed=false].isBrowser_QD4r>summary:before,.details_IpIu[open]:not(.isBrowser_QD4r)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter);content:""}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.docsWrapper_ct1J,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_t7IR,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:hsla(0,0%,100%,.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:hsla(0,0%,100%,.05);--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-duration:.25s;transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);right:0;transition-duration:.1s;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.tabs__item:hover,pre.shiki:hover div.highlight{background-color:var(--ifm-hover-overlay)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover,pre code a{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto;padding-left:0}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,.05);--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:hsla(0,0%,100%,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:hsla(0,0%,100%,.07);--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec;--ifm-color-primary:#39cac4;--ifm-color-primary-dark:#31b8b2;--ifm-color-primary-darker:#2eaea8;--ifm-color-primary-darkest:#268f8b;--ifm-color-primary-light:#4dcfca;--ifm-color-primary-lighter:#58d2cd;--ifm-color-primary-lightest:#76dad6}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.docusaurus-highlight-code-line{background-color:rgba(0,0,0,.1);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}html[data-theme=dark] .docusaurus-highlight-code-line{background-color:rgba(0,0,0,.3)}#docusaurus-base-url-issue-banner-container,.themedImage_BQGR,[data-theme=dark] .lightToggleIcon_lgto,[data-theme=dark] .shiki.github-light,[data-theme=light] .darkToggleIcon_U96C,[data-theme=light] .shiki.github-dark,html[data-announcement-bar-initially-dismissed=true] .announcementBar_zJRd,pre .error .code,pre.shiki .language-id{display:none}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.skipToContent_oPtH{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_oPtH:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_J5rP{line-height:0;padding:0}.content_bSb_{font-size:85%;padding:5px 0;text-align:center}.content_bSb_ a{color:inherit;text-decoration:underline}.announcementBar_zJRd{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_NpUd{flex:0 0 10px}.announcementBarClose_Jjdj{align-self:stretch;flex:0 0 30px}.toggle_ki11{height:2rem;width:2rem}.toggleButton_MMFG{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_MMFG:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_Uw7m{cursor:not-allowed}[data-theme=dark] .themedImage--dark_bGx0,[data-theme=light] .themedImage--light_HAxW{display:initial}.iconExternalLink_nPrP{margin-left:.3rem}.iconLanguage_kvP7{margin-right:5px;vertical-align:text-bottom}.navbarHideable_hhpl{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_nmcs{transform:translate3d(0,calc(-100% - 2px),0)}.footerLogoLink_tutC{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.copy-button:focus,.footerLogoLink_tutC:hover,.hash-link:focus,:hover>.hash-link,pre.shiki:hover>.copy-button{opacity:1}.mainWrapper_MB5r{flex:1 0 auto}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.iconEdit_bHB7{margin-right:.3em;vertical-align:sub}.tag_otG2{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_otG2:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_s0E1{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_PGyn{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_PGyn:after,.tagWithCount_PGyn:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_PGyn:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_PGyn:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_PGyn span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_Ow0B{display:inline}.tag_DFxh{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_pbO5{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_iI2p{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_iI2p:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_cHjC:after,.tocCollapsibleExpanded_BbRn{transform:none}.tocCollapsible_wXna{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vea0>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vea0 ul li{margin:.4rem .8rem}.tocCollapsibleContent_vea0 a{display:block}.tableOfContents_XG6w{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.anchorWithStickyNavbar_JmGV{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_pMLv{scroll-margin-top:.5rem}.hash-link{padding-left:.5rem;transition:opacity var(--ifm-transition-fast);user-select:none}.hash-link:before{content:"#"}pre.shiki>.code-title{align-items:center;border-bottom:1px solid var(--ifm-color-emphasis-300);color:var(--ifm-color-emphasis-900);display:flex;font-family:var(--ifm-font-family-base);font-weight:500;height:2.5rem;left:0;padding:0 var(--ifm-pre-padding);position:absolute;right:0;top:0;width:100%}pre.shiki.with-title{padding-top:2.5rem}pre.shiki .copy-button{-webkit-appearance:none;appearance:none;background:rgba(0,0,0,.3);border:none;border-radius:var(--ifm-global-radius);color:var(--ifm-color-white);cursor:pointer;padding:.4rem .5rem;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2);transition:opacity .2s ease-in-out;user-select:none}pre.shiki.with-title .copy-button{top:calc(2.5rem + var(--ifm-pre-padding)/ 2)}pre.shiki{overflow:visible;padding:0;position:relative;border:1px solid transparent}pre.shiki div.line,pre.shiki div.meta-line{padding-left:var(--ifm-pre-padding);padding-right:var(--ifm-pre-padding)}pre.shiki>.code-container{padding:var(--ifm-pre-padding) 0}[data-theme=light] pre.shiki{border-color:var(--ifm-color-emphasis-300)}pre.shiki:hover .dim{filter:none;opacity:1}pre.shiki div.dim{filter:grayscale(1);opacity:.5;transition:opacity .2s ease-in-out}pre.shiki div.dim,pre.shiki div.highlight{border-left:2px solid transparent;margin:0}pre.shiki div.highlight{opacity:1;transition:background-color .2s ease-in-out}pre.shiki:hover div.highlight{border-left:2px solid var(--ifm-color-primary);width:100%}pre.shiki div.line{min-height:1rem}pre.twoslash:hover data-lsp{border-color:var(--ifm-color-emphasis-400)}pre.twoslash data-lsp:hover:before{background-color:#3f3f3f;border-radius:2px;color:#fff;content:attr(lsp);font-size:85%;padding:5px 8px;position:absolute;text-align:left;transform:translateY(1.5rem);white-space:pre-wrap;z-index:100}pre .code-container{overflow:auto}pre data-err{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='3' width='6'%3E%3Cg fill='%23c94824'%3E%3Cpath d='m5.5 0-3 3H1.1l3-3z'/%3E%3Cpath d='m4 0 2 2V.6L5.4 0zM0 2l1 1h1.4L0 .6z'/%3E%3C/g%3E%3C/svg%3E") 0 100% repeat-x;padding-bottom:3px}pre .query{color:var(--ifm-color-primary);display:inline-block;margin-bottom:10px}pre .error,pre .error-behind{display:block;margin-top:8px;padding:6px 6px 6px 14px;white-space:pre-wrap;width:100%}pre .error{align-items:center;background-color:#fee;border-left:2px solid var(--ifm-color-danger-dark);color:#000;display:flex;position:absolute}.backToTopButton_iEvu,pre .arrow{background-color:var(--ifm-color-emphasis-200)}pre .error-behind{color:#fee;-webkit-user-select:none;user-select:none}pre .arrow{border-left:1px solid var(--ifm-color-emphasis-200);border-top:1px solid var(--ifm-color-emphasis-200);height:8px;margin-left:.1rem;position:relative;top:-7px;transform:translateY(25%) rotate(45deg);width:8px}pre .popover{border-radius:3px;margin-bottom:10px;margin-top:10px;padding:0 .5rem .3rem}pre .inline-completions ul.dropdown,pre .popover{background-color:var(--ifm-color-emphasis-200);display:inline-block}pre .inline-completions ul.dropdown{border-left:2px solid var(--ifm-color-primary);font-family:var(--code-font);margin:0 0 0 3px;padding:0;position:absolute;width:240px}pre .inline-completions ul.dropdown:before{background-color:var(--ifm-color-primary);content:" ";left:-2px;position:absolute;top:-1.2rem;width:2px}pre .inline-completions ul.dropdown li{margin-bottom:4px;overflow-x:hidden;padding-left:4px}pre .inline-completions ul.dropdown li.deprecated{text-decoration:line-through}pre .inline-completions ul.dropdown li span.result{color:#000;display:inline-block;width:100px}data-lsp{border-bottom:1px dotted transparent;transition:border-color .3s}.details_IpIu{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_IpIu>summary{cursor:pointer;padding-left:1rem;position:relative}.details_IpIu>summary::-webkit-details-marker{display:none}.details_IpIu>summary:before{border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_Fd2D{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_jERq{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}:not(.containsTaskList_QWGu>li)>.containsTaskList_QWGu{padding-left:0}.img_SS3x{height:auto}.admonition_uH4V{margin-bottom:1em}.admonitionHeading_P5_N{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem}.admonitionHeading_P5_N code{text-transform:none}.admonitionIcon_MF44{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_MF44 svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbsContainer_T5ub{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.breadcrumbHomeIcon_GlTw{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.backToTopButton_iEvu{border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_iEvu:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_DO8w{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:hsla(0,0%,100%,.05);--docusaurus-collapse-button-bg-hover:hsla(0,0%,100%,.1)}.collapseSidebarButton_oTwn,.docSidebarContainer_y0RQ,.sidebarLogo_CYvI{display:none}.docMainContainer_sTIZ,.docPage_KLoz{display:flex;width:100%}.cardContainer_H47c{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 rgba(0,0,0,.15);transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_H47c:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 rgba(0,0,0,.2)}.cardTitle_tTnA{font-size:1.2rem}.cardDescription_rTl4{font-size:.8rem}@media (min-width:997px){.collapseSidebarButton_oTwn,.expandButton_YOoA{background-color:var(--docusaurus-collapse-button-bg);position:sticky}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_Jjdj,.announcementBarPlaceholder_NpUd{flex-basis:50px}.searchBox_WqAV{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_pbO5{text-align:right}.tocMobile_Ojys{display:none}.docItemCol_Qr34{max-width:75%!important}.collapseSidebarButton_oTwn{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px}.collapseSidebarButtonIcon_pMEX{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_GZLG,[dir=rtl] .collapseSidebarButtonIcon_pMEX{transform:rotate(0)}.collapseSidebarButton_oTwn:focus,.collapseSidebarButton_oTwn:hover,.expandButton_YOoA:focus,.expandButton_YOoA:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_OniL{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_jmj1{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_jmj1{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_YufC{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_CUen{display:flex;flex-direction:column;height:100%;max-height:100vh;padding-top:var(--ifm-navbar-height);position:sticky;top:0;transition:opacity 50ms;width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_w4KB{padding-top:0}.sidebarHidden_k6VE{height:0;opacity:0;overflow:hidden;visibility:hidden}.sidebarLogo_CYvI{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_CYvI img{height:2rem;margin-right:.5rem}.expandButton_YOoA{align-items:center;display:flex;height:100%;justify-content:center;max-height:100vh;top:0;transition:background-color var(--ifm-transition-fast) ease}[dir=rtl] .expandButtonIcon_GZLG{transform:rotate(180deg)}.docSidebarContainer_y0RQ{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_uArb{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.docMainContainer_sTIZ{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_iSjt{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_PxMR{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_Hewu,.footer__link-separator,.navbar__item,.tableOfContents_XG6w{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_WqAV{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_Tr6w{padding:0 .3rem}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media (hover:hover){.backToTopButton_iEvu:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){data-lsp,pre .code-container>a,pre.shiki div.dim,pre.shiki div.highlight{transition:none}}@media print{.announcementBar_zJRd,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_Ojys{display:none}.tabs{page-break-inside:avoid}} \ No newline at end of file diff --git a/assets/js/01c27ace.23b54a50.js b/assets/js/01c27ace.23b54a50.js deleted file mode 100644 index 5fbf5f4..0000000 --- a/assets/js/01c27ace.23b54a50.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[376],{3050:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>p});var r=a(2685),n=(a(7378),a(5318));const l={sidebar_position:8},o="Collections",s={unversionedId:"eslint-base/collections",id:"eslint-base/collections",title:"Collections",description:"This page introduces rules related to arrays and other structures.",source:"@site/../docs/eslint-base/collections.md",sourceDirName:"eslint-base",slug:"/eslint-base/collections",permalink:"/js-style-guide/eslint-base/collections",draft:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8},sidebar:"defaultSidebar",previous:{title:"Objects & classes",permalink:"/js-style-guide/eslint-base/objects-classes"},next:{title:"Async operations",permalink:"/js-style-guide/eslint-base/async"}},i={},p=[{value:"Arrays",id:"arrays",level:2},{value:"array-callback-return",id:"array-callback-return",level:3},{value:"no-array-constructor",id:"no-array-constructor",level:3},{value:"no-sparse-arrays",id:"no-sparse-arrays",level:3}],c={toc:p},d="wrapper";function m(e){let{components:t,...a}=e;return(0,n.kt)(d,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"collections"},"Collections"),(0,n.kt)("p",null,"This page introduces rules related to arrays and other structures."),(0,n.kt)("h2",{id:"arrays"},"Arrays"),(0,n.kt)("h3",{id:"array-callback-return"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/array-callback-return"},(0,n.kt)("inlineCode",{parentName:"a"},"array-callback-return"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Configuration:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Disallow ",(0,n.kt)("inlineCode",{parentName:"li"},"return;")," to implicitly mean ",(0,n.kt)("inlineCode",{parentName:"li"},"return undefined;")," (",(0,n.kt)("inlineCode",{parentName:"li"},"allowImplicit: false"),")"),(0,n.kt)("li",{parentName:"ul"},"Do not enforce that ",(0,n.kt)("inlineCode",{parentName:"li"},"forEach")," callback doesn't return a value (",(0,n.kt)("inlineCode",{parentName:"li"},"checkForEach: true"),")")))),(0,n.kt)("p",null,"The intention of this rule is clear: to make the usage of array methods more appropriate. ",(0,n.kt)("inlineCode",{parentName:"p"},"Array#forEach")," is the only method that's designed to be purely for its side-effects, while all the other methods should not only return a value, but also strive to be side-effect-free. Note that TypeScript doesn't check the return type of callbacks, because the callbacks are very loosely typed."),(0,n.kt)("p",null,"However, we have to give up on checking ",(0,n.kt)("inlineCode",{parentName:"p"},"forEach"),", due to false-positives with concise arrows. Consider this:"),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"arr"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ["),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"];")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"set"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Set"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},">();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// checkForEach will report this case as well")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"arr."),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"forEach"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(("),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},"x"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," set."),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"add"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(x));"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"arr"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ["),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"];")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"set"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Set"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},">();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// checkForEach will report this case as well")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"arr."),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"forEach"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(("),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"x"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," set."),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"add"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(x));")))))),(0,n.kt)("p",null,"Note that this rule can still false-positive when calling a method on a non-array object. However, we still set the severity as error because:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The necessity of enforcing callback return values far outweighs the risk of false-positive."),(0,n.kt)("li",{parentName:"ul"},"Most APIs that are called ",(0,n.kt)("inlineCode",{parentName:"li"},"map")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"filter")," are sanely designed and function in a similar fashion as array methods.")),(0,n.kt)("h3",{id:"no-array-constructor"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-array-constructor"},(0,n.kt)("inlineCode",{parentName:"a"},"no-array-constructor"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"@typescript-eslint/no-array-constructor"))))),(0,n.kt)("p",null,"We disallow the use of ",(0,n.kt)("inlineCode",{parentName:"p"},"Array()")," because you should always prefer array literals. Even in the case of ",(0,n.kt)("inlineCode",{parentName:"p"},"Array()"),", you should generally use ",(0,n.kt)("inlineCode",{parentName:"p"},"[] as T[]")," instead."),(0,n.kt)("h3",{id:"no-sparse-arrays"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-sparse-arrays"},(0,n.kt)("inlineCode",{parentName:"a"},"no-sparse-arrays"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,"Don't create sparse arrays. They are very hard to optimize and behave inconsistently with different array methods. This rule only checks array literals, but you should: (a) generally not use ",(0,n.kt)("inlineCode",{parentName:"p"},"Array(length)")," (b) don't ",(0,n.kt)("inlineCode",{parentName:"p"},"delete")," array indices (c) don't manually extend the ",(0,n.kt)("inlineCode",{parentName:"p"},"length")," property."))}m.isMDXComponent=!0},5318:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var r=a(7378);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var i=r.createContext({}),p=function(e){var t=r.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},y=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,l=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(a),y=n,k=d["".concat(i,".").concat(y)]||d[y]||m[y]||l;return a?r.createElement(k,o(o({ref:t},c),{},{components:a})):r.createElement(k,o({ref:t},c))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=a.length,o=new Array(l);o[0]=y;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[d]="string"==typeof e?e:n,o[1]=s;for(var p=2;p{r.d(a,{xA:()=>p,yg:()=>m});var t=r(3696);function n(e,a,r){return a in e?Object.defineProperty(e,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[a]=r,e}function l(e,a){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),r.push.apply(r,t)}return r}function o(e){for(var a=1;a=0||(n[r]=e[r]);return n}(e,a);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var i=t.createContext({}),y=function(e){var a=t.useContext(i),r=a;return e&&(r="function"==typeof e?e(a):o(o({},a),e)),r},p=function(e){var a=y(e.components);return t.createElement(i.Provider,{value:a},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},g=t.forwardRef((function(e,a){var r=e.components,n=e.mdxType,l=e.originalType,i=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=y(r),g=n,m=c["".concat(i,".").concat(g)]||c[g]||d[g]||l;return r?t.createElement(m,o(o({ref:a},p),{},{components:r})):t.createElement(m,o({ref:a},p))}));function m(e,a){var r=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var l=r.length,o=new Array(l);o[0]=g;var s={};for(var i in a)hasOwnProperty.call(a,i)&&(s[i]=a[i]);s.originalType=e,s[c]="string"==typeof e?e:n,o[1]=s;for(var y=2;y{r.r(a),r.d(a,{assets:()=>i,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>s,toc:()=>y});var t=r(8102),n=(r(3696),r(9916));const l={sidebar_position:8},o="Collections",s={unversionedId:"eslint-base/collections",id:"eslint-base/collections",title:"Collections",description:"This page introduces rules related to arrays and other structures.",source:"@site/../docs/eslint-base/collections.md",sourceDirName:"eslint-base",slug:"/eslint-base/collections",permalink:"/js-style-guide/eslint-base/collections",draft:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8},sidebar:"defaultSidebar",previous:{title:"Objects & classes",permalink:"/js-style-guide/eslint-base/objects-classes"},next:{title:"Async operations",permalink:"/js-style-guide/eslint-base/async"}},i={},y=[{value:"Arrays",id:"arrays",level:2},{value:"array-callback-return",id:"array-callback-return",level:3},{value:"no-array-constructor",id:"no-array-constructor",level:3},{value:"no-sparse-arrays",id:"no-sparse-arrays",level:3}],p={toc:y},c="wrapper";function d(e){let{components:a,...r}=e;return(0,n.yg)(c,(0,t.A)({},p,r,{components:a,mdxType:"MDXLayout"}),(0,n.yg)("h1",{id:"collections"},"Collections"),(0,n.yg)("p",null,"This page introduces rules related to arrays and other structures."),(0,n.yg)("h2",{id:"arrays"},"Arrays"),(0,n.yg)("h3",{id:"array-callback-return"},(0,n.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/array-callback-return"},(0,n.yg)("inlineCode",{parentName:"a"},"array-callback-return"))),(0,n.yg)("ul",null,(0,n.yg)("li",{parentName:"ul"},"Severity: error"),(0,n.yg)("li",{parentName:"ul"},"Configuration:",(0,n.yg)("ul",{parentName:"li"},(0,n.yg)("li",{parentName:"ul"},"Disallow ",(0,n.yg)("inlineCode",{parentName:"li"},"return;")," to implicitly mean ",(0,n.yg)("inlineCode",{parentName:"li"},"return undefined;")," (",(0,n.yg)("inlineCode",{parentName:"li"},"allowImplicit: false"),")"),(0,n.yg)("li",{parentName:"ul"},"Do not enforce that ",(0,n.yg)("inlineCode",{parentName:"li"},"forEach")," callback doesn't return a value (",(0,n.yg)("inlineCode",{parentName:"li"},"checkForEach: true"),")")))),(0,n.yg)("p",null,"The intention of this rule is clear: to make the usage of array methods more appropriate. ",(0,n.yg)("inlineCode",{parentName:"p"},"Array#forEach")," is the only method that's designed to be purely for its side-effects, while all the other methods should not only return a value, but also strive to be side-effect-free. Note that TypeScript doesn't check the return type of callbacks, because the callbacks are very loosely typed."),(0,n.yg)("p",null,"However, we have to give up on checking ",(0,n.yg)("inlineCode",{parentName:"p"},"forEach"),", due to false-positives with concise arrows. Consider this:"),(0,n.yg)("div",{className:"shiki-twoslash-fragment"},(0,n.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.yg)("div",{parentName:"pre",className:"code-container"},(0,n.yg)("code",{parentName:"div"},(0,n.yg)("div",{parentName:"code",className:"line"},(0,n.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"arr"),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ["),(0,n.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,n.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,n.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}},"];")),(0,n.yg)("div",{parentName:"code",className:"line"},(0,n.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"set"),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Set"),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,n.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}},">();")),(0,n.yg)("div",{parentName:"code",className:"line"},(0,n.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// checkForEach will report this case as well")),(0,n.yg)("div",{parentName:"code",className:"line"},(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}},"arr."),(0,n.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"forEach"),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(("),(0,n.yg)("span",{parentName:"div",style:{color:"#953800"}},"x"),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,n.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}}," set."),(0,n.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"add"),(0,n.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(x));"))))),(0,n.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.yg)("div",{parentName:"pre",className:"code-container"},(0,n.yg)("code",{parentName:"div"},(0,n.yg)("div",{parentName:"code",className:"line"},(0,n.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"arr"),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ["),(0,n.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,n.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,n.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"];")),(0,n.yg)("div",{parentName:"code",className:"line"},(0,n.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"set"),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Set"),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,n.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},">();")),(0,n.yg)("div",{parentName:"code",className:"line"},(0,n.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// checkForEach will report this case as well")),(0,n.yg)("div",{parentName:"code",className:"line"},(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"arr."),(0,n.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"forEach"),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(("),(0,n.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"x"),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,n.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," set."),(0,n.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"add"),(0,n.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(x));")))))),(0,n.yg)("p",null,"Note that this rule can still false-positive when calling a method on a non-array object. However, we still set the severity as error because:"),(0,n.yg)("ul",null,(0,n.yg)("li",{parentName:"ul"},"The necessity of enforcing callback return values far outweighs the risk of false-positive."),(0,n.yg)("li",{parentName:"ul"},"Most APIs that are called ",(0,n.yg)("inlineCode",{parentName:"li"},"map")," or ",(0,n.yg)("inlineCode",{parentName:"li"},"filter")," are sanely designed and function in a similar fashion as array methods.")),(0,n.yg)("h3",{id:"no-array-constructor"},(0,n.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-array-constructor"},(0,n.yg)("inlineCode",{parentName:"a"},"no-array-constructor"))),(0,n.yg)("ul",null,(0,n.yg)("li",{parentName:"ul"},"Severity: error"),(0,n.yg)("li",{parentName:"ul"},"Related:",(0,n.yg)("ul",{parentName:"li"},(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("inlineCode",{parentName:"li"},"@typescript-eslint/no-array-constructor"))))),(0,n.yg)("p",null,"We disallow the use of ",(0,n.yg)("inlineCode",{parentName:"p"},"Array()")," because you should always prefer array literals. Even in the case of ",(0,n.yg)("inlineCode",{parentName:"p"},"Array()"),", you should generally use ",(0,n.yg)("inlineCode",{parentName:"p"},"[] as T[]")," instead."),(0,n.yg)("h3",{id:"no-sparse-arrays"},(0,n.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-sparse-arrays"},(0,n.yg)("inlineCode",{parentName:"a"},"no-sparse-arrays"))),(0,n.yg)("ul",null,(0,n.yg)("li",{parentName:"ul"},"Severity: error")),(0,n.yg)("p",null,"Don't create sparse arrays. They are very hard to optimize and behave inconsistently with different array methods. This rule only checks array literals, but you should: (a) generally not use ",(0,n.yg)("inlineCode",{parentName:"p"},"Array(length)")," (b) don't ",(0,n.yg)("inlineCode",{parentName:"p"},"delete")," array indices (c) don't manually extend the ",(0,n.yg)("inlineCode",{parentName:"p"},"length")," property."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/17896441.a3992cc8.js b/assets/js/17896441.a3992cc8.js new file mode 100644 index 0000000..0ffdecd --- /dev/null +++ b/assets/js/17896441.a3992cc8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[401],{9916:(e,t,n)=>{n.d(t,{xA:()=>d,yg:()=>f});var a=n(3696);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,l=e.mdxType,r=e.originalType,c=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),m=s(n),p=l,f=m["".concat(c,".").concat(p)]||m[p]||u[p]||r;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function f(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=n.length,o=new Array(r);o[0]=p;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i[m]="string"==typeof e?e:l,o[1]=i;for(var s=2;s{n.r(t),n.d(t,{default:()=>Qe});var a=n(3696),l=n(5605),r=n(5198);const o=a.createContext(null);function i(e){let{children:t,content:n}=e;const l=function(e){return(0,a.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return a.createElement(o.Provider,{value:l},t)}function c(){const e=(0,a.useContext)(o);if(null===e)throw new r.dV("DocProvider");return e}function s(){const{metadata:e,frontMatter:t,assets:n}=c();return a.createElement(l.be,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var d=n(8017),m=n(2575),u=n(8102),p=n(6590),f=n(1611);function h(e){const{permalink:t,title:n,subLabel:l,isNext:r}=e;return a.createElement(f.A,{className:(0,d.A)("pagination-nav__link",r?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},l&&a.createElement("div",{className:"pagination-nav__sublabel"},l),a.createElement("div",{className:"pagination-nav__label"},n))}function b(e){const{previous:t,next:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,p.T)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages navigation",description:"The ARIA label for the docs pagination"})},t&&a.createElement(h,(0,u.A)({},t,{subLabel:a.createElement(p.A,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&a.createElement(h,(0,u.A)({},n,{subLabel:a.createElement(p.A,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}function v(){const{metadata:e}=c();return a.createElement(b,{previous:e.previous,next:e.next})}var g=n(7032),E=n(4548),A=n(3237),y=n(3947),C=n(7294);const N={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(p.A,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(p.A,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function L(e){const t=N[e.versionMetadata.banner];return a.createElement(t,e)}function T(e){let{versionLabel:t,to:n,onClick:l}=e;return a.createElement(p.A,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(f.A,{to:n,onClick:l},a.createElement(p.A,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function _(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:l}}=(0,g.A)(),{pluginId:r}=(0,E.vT)({failfast:!0}),{savePreferredVersionName:o}=(0,y.g1)(r),{latestDocSuggestion:i,latestVersionSuggestion:c}=(0,E.HW)(r),s=i??(m=c).docs.find((e=>e.id===m.mainDocId));var m;return a.createElement("div",{className:(0,d.A)(t,A.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(L,{siteTitle:l,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(T,{versionLabel:c.label,to:s.path,onClick:()=>o(c.name)})))}function k(e){let{className:t}=e;const n=(0,C.r)();return n.banner?a.createElement(_,{className:t,versionMetadata:n}):null}function x(e){let{className:t}=e;const n=(0,C.r)();return n.badge?a.createElement("span",{className:(0,d.A)(t,A.G.docs.docVersionBadge,"badge badge--secondary")},a.createElement(p.A,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}function w(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return a.createElement(p.A,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function H(e){let{lastUpdatedBy:t}=e;return a.createElement(p.A,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function O(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:l}=e;return a.createElement("span",{className:A.G.common.lastUpdated},a.createElement(p.A,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(w,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:l?a.createElement(H,{lastUpdatedBy:l}):""}},"Last updated{atDate}{byUser}"),!1)}const M={iconEdit:"iconEdit_bHB7"};function B(e){let{className:t,...n}=e;return a.createElement("svg",(0,u.A)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,d.A)(M.iconEdit,t),"aria-hidden":"true"},n),a.createElement("g",null,a.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function U(e){let{editUrl:t}=e;return a.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:A.G.common.editThisPage},a.createElement(B,null),a.createElement(p.A,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}const S={tag:"tag_otG2",tagRegular:"tagRegular_s0E1",tagWithCount:"tagWithCount_PGyn"};function I(e){let{permalink:t,label:n,count:l}=e;return a.createElement(f.A,{href:t,className:(0,d.A)(S.tag,l?S.tagWithCount:S.tagRegular)},n,l&&a.createElement("span",null,l))}const R={tags:"tags_Ow0B",tag:"tag_DFxh"};function P(e){let{tags:t}=e;return a.createElement(a.Fragment,null,a.createElement("b",null,a.createElement(p.A,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),a.createElement("ul",{className:(0,d.A)(R.tags,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:n}=e;return a.createElement("li",{key:n,className:R.tag},a.createElement(I,{label:t,permalink:n}))}))))}const z={lastUpdated:"lastUpdated_pbO5"};function D(e){return a.createElement("div",{className:(0,d.A)(A.G.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(P,e)))}function j(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:r}=e;return a.createElement("div",{className:(0,d.A)(A.G.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(U,{editUrl:t})),a.createElement("div",{className:(0,d.A)("col",z.lastUpdated)},(n||l)&&a.createElement(O,{lastUpdatedAt:n,formattedLastUpdatedAt:r,lastUpdatedBy:l})))}function V(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:l,lastUpdatedBy:r,tags:o}=e,i=o.length>0,s=!!(t||n||r);return i||s?a.createElement("footer",{className:(0,d.A)(A.G.docs.docFooter,"docusaurus-mt-lg")},i&&a.createElement(D,{tags:o}),s&&a.createElement(j,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:r,formattedLastUpdatedAt:l})):null}var G=n(51),F=n(7412);function W(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function q(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=q({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function $(e){const t=e.getBoundingClientRect();return t.top===t.bottom?$(e.parentNode):t}function Q(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>$(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function J(e){const t=(0,a.useRef)(void 0),n=X();(0,a.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:o}=e;function i(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),i=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:o}),c=Q(i,{anchorTopOffset:n.current}),s=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===s)}))}return document.addEventListener("scroll",i),document.addEventListener("resize",i),i(),()=>{document.removeEventListener("scroll",i),document.removeEventListener("resize",i)}}),[e,n])}function Y(e){let{toc:t,className:n,linkClassName:l,isChild:r}=e;return t.length?a.createElement("ul",{className:r?void 0:n},t.map((e=>a.createElement("li",{key:e.id},a.createElement("a",{href:`#${e.id}`,className:l??void 0,dangerouslySetInnerHTML:{__html:e.value}}),a.createElement(Y,{isChild:!0,toc:e.children,className:n,linkClassName:l}))))):null}const K=a.memo(Y);function Z(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:r,minHeadingLevel:o,maxHeadingLevel:i,...c}=e;const s=(0,F.p)(),d=o??s.tableOfContents.minHeadingLevel,m=i??s.tableOfContents.maxHeadingLevel,p=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:l}=e;return(0,a.useMemo)((()=>q({toc:W(t),minHeadingLevel:n,maxHeadingLevel:l})),[t,n,l])}({toc:t,minHeadingLevel:d,maxHeadingLevel:m});return J((0,a.useMemo)((()=>{if(l&&r)return{linkClassName:l,linkActiveClassName:r,minHeadingLevel:d,maxHeadingLevel:m}}),[l,r,d,m])),a.createElement(K,(0,u.A)({toc:p,className:n,linkClassName:l},c))}const ee={tocCollapsibleButton:"tocCollapsibleButton_iI2p",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_cHjC"};function te(e){let{collapsed:t,...n}=e;return a.createElement("button",(0,u.A)({type:"button"},n,{className:(0,d.A)("clean-btn",ee.tocCollapsibleButton,!t&&ee.tocCollapsibleButtonExpanded,n.className)}),a.createElement(p.A,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const ne={tocCollapsible:"tocCollapsible_wXna",tocCollapsibleContent:"tocCollapsibleContent_vea0",tocCollapsibleExpanded:"tocCollapsibleExpanded_BbRn"};function ae(e){let{toc:t,className:n,minHeadingLevel:l,maxHeadingLevel:r}=e;const{collapsed:o,toggleCollapsed:i}=(0,G.u)({initialState:!0});return a.createElement("div",{className:(0,d.A)(ne.tocCollapsible,!o&&ne.tocCollapsibleExpanded,n)},a.createElement(te,{collapsed:o,onClick:i}),a.createElement(G.N,{lazy:!0,className:ne.tocCollapsibleContent,collapsed:o},a.createElement(Z,{toc:t,minHeadingLevel:l,maxHeadingLevel:r})))}const le={tocMobile:"tocMobile_Ojys"};function re(){const{toc:e,frontMatter:t}=c();return a.createElement(ae,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,d.A)(A.G.docs.docTocMobile,le.tocMobile)})}const oe={tableOfContents:"tableOfContents_XG6w",docItemContainer:"docItemContainer_Tr6w"},ie="table-of-contents__link toc-highlight",ce="table-of-contents__link--active";function se(e){let{className:t,...n}=e;return a.createElement("div",{className:(0,d.A)(oe.tableOfContents,"thin-scrollbar",t)},a.createElement(Z,(0,u.A)({},n,{linkClassName:ie,linkActiveClassName:ce})))}function de(){const{toc:e,frontMatter:t}=c();return a.createElement(se,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:A.G.docs.docTocDesktop})}const me={anchorWithStickyNavbar:"anchorWithStickyNavbar_JmGV",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_pMLv"};function ue(e){let{as:t,id:n,...l}=e;const{navbar:{hideOnScroll:r}}=(0,F.p)();return"h1"!==t&&n?a.createElement(t,(0,u.A)({},l,{className:(0,d.A)("anchor",r?me.anchorWithHideOnScrollNavbar:me.anchorWithStickyNavbar),id:n}),l.children,a.createElement("a",{className:"hash-link",href:`#${n}`,title:(0,p.T)({id:"theme.common.headingLinkTitle",message:"Direct link to heading",description:"Title for link to heading"})},"\u200b")):a.createElement(t,(0,u.A)({},l,{id:void 0}))}var pe=n(9916);const fe=e=>{let{children:t,...n}=e;const l=(0,a.useRef)(null),[r,o]=(0,a.useState)(!1);return a.createElement("pre",(0,u.A)({},n,{ref:l}),t,a.createElement("button",{type:"button","aria-label":(0,p.T)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),className:"copy-button",onClick:()=>{l.current&&function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const a=document.createElement("textarea"),l=document.activeElement;a.value=e,a.setAttribute("readonly",""),a.style.contain="strict",a.style.position="absolute",a.style.left="-9999px",a.style.fontSize="12pt";const r=document.getSelection(),o=r.rangeCount>0&&r.getRangeAt(0);n.append(a),a.select(),a.selectionStart=0,a.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}a.remove(),o&&(r.removeAllRanges(),r.addRange(o)),l&&l.focus()}(Array.from(l.current.querySelectorAll("code div.line")).map((e=>e.textContent)).join("\n")),o(!0),setTimeout((()=>o(!1)),2e3)}},r?a.createElement(p.A,{id:"theme.CodeBlock.copied",description:"The copied button label on code blocks"},"Copied"):a.createElement(p.A,{id:"theme.CodeBlock.copy",description:"The copy button label on code blocks"},"Copy")))};var he=n(7854);var be=n(6681);const ve={details:"details_IpIu",isBrowser:"isBrowser_QD4r",collapsibleContent:"collapsibleContent_Fd2D"};function ge(e){return!!e&&("SUMMARY"===e.tagName||ge(e.parentElement))}function Ee(e,t){return!!e&&(e===t||Ee(e.parentElement,t))}function Ae(e){let{summary:t,children:n,...l}=e;const r=(0,be.A)(),o=(0,a.useRef)(null),{collapsed:i,setCollapsed:c}=(0,G.u)({initialState:!l.open}),[s,m]=(0,a.useState)(l.open);return a.createElement("details",(0,u.A)({},l,{ref:o,open:s,"data-collapsed":i,className:(0,d.A)(ve.details,r&&ve.isBrowser,l.className),onMouseDown:e=>{ge(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;ge(t)&&Ee(t,o.current)&&(e.preventDefault(),i?(c(!1),m(!0)):c(!0))}}),t??a.createElement("summary",null,"Details"),a.createElement(G.N,{lazy:!1,collapsed:i,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{c(e),m(!e)}},a.createElement("div",{className:ve.collapsibleContent},n)))}const ye={details:"details_jERq"},Ce="alert alert--info";function Ne(e){let{...t}=e;return a.createElement(Ae,(0,u.A)({},t,{className:(0,d.A)(Ce,ye.details,t.className)}))}function Le(e){return a.createElement(ue,e)}const Te={containsTaskList:"containsTaskList_QWGu"};const _e={img:"img_SS3x"};const ke="admonition_uH4V",xe="admonitionHeading_P5_N",we="admonitionIcon_MF44",He="admonitionContent_yySL";const Oe={note:{infimaClassName:"secondary",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:a.createElement(p.A,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:a.createElement(p.A,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:a.createElement(p.A,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:a.createElement(p.A,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 16 16"},a.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:a.createElement(p.A,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},Me={secondary:"note",important:"info",success:"tip",warning:"danger"};function Be(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=a.Children.toArray(e),n=t.find((e=>a.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),l=a.createElement(a.Fragment,null,t.filter((e=>e!==n)));return{mdxAdmonitionTitle:n,rest:l}}(e.children);return{...e,title:e.title??t,children:n}}const Ue={...{head:function(e){const t=a.Children.map(e.children,(e=>a.isValidElement(e)?function(e){if(e.props?.mdxType&&e.props.originalType){const{mdxType:t,originalType:n,...l}=e.props;return a.createElement(e.props.originalType,l)}return e}(e):e));return a.createElement(he.A,e,t)},code:function(e){const t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return a.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")||(0,a.isValidElement)(e)&&t.includes(e.props?.mdxType)))?a.createElement("code",e):a.createElement(fe,e)},a:function(e){return a.createElement(f.A,e)},pre:function(e){return a.createElement(fe,(0,a.isValidElement)(e.children)&&"code"===e.children.props?.originalType?e.children.props:{...e})},details:function(e){const t=a.Children.toArray(e.children),n=t.find((e=>a.isValidElement(e)&&"summary"===e.props?.mdxType)),l=a.createElement(a.Fragment,null,t.filter((e=>e!==n)));return a.createElement(Ne,(0,u.A)({},e,{summary:n}),l)},ul:function(e){return a.createElement("ul",(0,u.A)({},e,{className:(t=e.className,(0,d.A)(t,t?.includes("contains-task-list")&&Te.containsTaskList))}));var t},img:function(e){return a.createElement("img",(0,u.A)({loading:"lazy"},e,{className:(t=e.className,(0,d.A)(t,_e.img))}));var t},h1:e=>a.createElement(Le,(0,u.A)({as:"h1"},e)),h2:e=>a.createElement(Le,(0,u.A)({as:"h2"},e)),h3:e=>a.createElement(Le,(0,u.A)({as:"h3"},e)),h4:e=>a.createElement(Le,(0,u.A)({as:"h4"},e)),h5:e=>a.createElement(Le,(0,u.A)({as:"h5"},e)),h6:e=>a.createElement(Le,(0,u.A)({as:"h6"},e)),admonition:function(e){const{children:t,type:n,title:l,icon:r}=Be(e),o=function(e){const t=Me[e]??e,n=Oe[t];return n||(console.warn(`No admonition config found for admonition type "${t}". Using Info as fallback.`),Oe.info)}(n),i=l??o.label,{iconComponent:c}=o,s=r??a.createElement(c,null);return a.createElement("div",{className:(0,d.A)(A.G.common.admonition,A.G.common.admonitionType(e.type),"alert",`alert--${o.infimaClassName}`,ke)},a.createElement("div",{className:xe},a.createElement("span",{className:we},s),i),a.createElement("div",{className:He},t))},mermaid:n(6712).A},div:e=>"shiki-twoslash-fragment"===e.className?a.createElement(a.Fragment,null,e.children):a.createElement("div",e),pre:e=>a.createElement(fe,e),code:e=>a.createElement("code",e)};function Se(e){let{children:t}=e;return a.createElement(pe.xA,{components:Ue},t)}function Ie(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return a.createElement("div",{className:(0,d.A)(A.G.docs.docMarkdown,"markdown")},n&&a.createElement("header",null,a.createElement(ue,{as:"h1"},n)),a.createElement(Se,null,t))}var Re=n(8600),Pe=n(4379),ze=n(883);function De(e){return a.createElement("svg",(0,u.A)({viewBox:"0 0 24 24"},e),a.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const je={breadcrumbsContainer:"breadcrumbsContainer_T5ub",breadcrumbHomeIcon:"breadcrumbHomeIcon_GlTw"};function Ve(e){let{children:t,href:n,isLast:l}=e;const r="breadcrumbs__link";return l?a.createElement("span",{className:r,itemProp:"name"},t):n?a.createElement(f.A,{className:r,href:n,itemProp:"item"},a.createElement("span",{itemProp:"name"},t)):a.createElement("span",{className:r},t)}function Ge(e){let{children:t,active:n,index:l,addMicrodata:r}=e;return a.createElement("li",(0,u.A)({},r&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,d.A)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,a.createElement("meta",{itemProp:"position",content:String(l+1)}))}function Fe(){const e=(0,ze.A)("/");return a.createElement("li",{className:"breadcrumbs__item"},a.createElement(f.A,{"aria-label":(0,p.T)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:(0,d.A)("breadcrumbs__link",je.breadcrumbsItemLink),href:e},a.createElement(De,{className:je.breadcrumbHomeIcon})))}function We(){const e=(0,Re.OF)(),t=(0,Pe.Dt)();return e?a.createElement("nav",{className:(0,d.A)(A.G.docs.docBreadcrumbs,je.breadcrumbsContainer),"aria-label":(0,p.T)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},a.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(Fe,null),e.map(((t,n)=>{const l=n===e.length-1;return a.createElement(Ge,{key:n,active:l,index:n,addMicrodata:!!t.href},a.createElement(Ve,{href:t.href,isLast:l},t.label))})))):null}const qe={docItemContainer:"docItemContainer_tjFy",docItemCol:"docItemCol_Qr34"};function $e(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.l)(),l=e.hide_table_of_contents,r=!l&&t.length>0;return{hidden:l,mobile:r?a.createElement(re,null):void 0,desktop:!r||"desktop"!==n&&"ssr"!==n?void 0:a.createElement(de,null)}}();return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,d.A)("col",!n.hidden&&qe.docItemCol)},a.createElement(k,null),a.createElement("div",{className:qe.docItemContainer},a.createElement("article",null,a.createElement(We,null),a.createElement(x,null),n.mobile,a.createElement(Ie,null,t),a.createElement(V,null)),a.createElement(v,null))),n.desktop&&a.createElement("div",{className:"col col--3"},n.desktop))}function Qe(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,n=e.content;return a.createElement(i,{content:e.content},a.createElement(l.e3,{className:t},a.createElement(s,null),a.createElement($e,null,a.createElement(n,null))))}}}]); \ No newline at end of file diff --git a/assets/js/17896441.b874c847.js b/assets/js/17896441.b874c847.js deleted file mode 100644 index b2a07ea..0000000 --- a/assets/js/17896441.b874c847.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[918],{2389:(e,t,n)=>{n.r(t),n.d(t,{default:()=>$e});var a=n(7378),l=n(8836),r=n(3879);const o=a.createContext(null);function i(e){let{children:t,content:n}=e;const l=function(e){return(0,a.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return a.createElement(o.Provider,{value:l},t)}function c(){const e=(0,a.useContext)(o);if(null===e)throw new r.i6("DocProvider");return e}function s(){const{metadata:e,frontMatter:t,assets:n}=c();return a.createElement(l.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var d=n(8944),m=n(7980),u=n(2685),p=n(7419),f=n(1191);function h(e){const{permalink:t,title:n,subLabel:l,isNext:r}=e;return a.createElement(f.Z,{className:(0,d.Z)("pagination-nav__link",r?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},l&&a.createElement("div",{className:"pagination-nav__sublabel"},l),a.createElement("div",{className:"pagination-nav__label"},n))}function b(e){const{previous:t,next:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,p.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages navigation",description:"The ARIA label for the docs pagination"})},t&&a.createElement(h,(0,u.Z)({},t,{subLabel:a.createElement(p.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&a.createElement(h,(0,u.Z)({},n,{subLabel:a.createElement(p.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}function v(){const{metadata:e}=c();return a.createElement(b,{previous:e.previous,next:e.next})}var g=n(9939),E=n(1705),y=n(5854),C=n(8072),N=n(2885);const L={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(p.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(p.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function k(e){const t=L[e.versionMetadata.banner];return a.createElement(t,e)}function T(e){let{versionLabel:t,to:n,onClick:l}=e;return a.createElement(p.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(f.Z,{to:n,onClick:l},a.createElement(p.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function Z(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:l}}=(0,g.Z)(),{pluginId:r}=(0,E.gA)({failfast:!0}),{savePreferredVersionName:o}=(0,C.J)(r),{latestDocSuggestion:i,latestVersionSuggestion:c}=(0,E.Jo)(r),s=i??(m=c).docs.find((e=>e.id===m.mainDocId));var m;return a.createElement("div",{className:(0,d.Z)(t,y.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(k,{siteTitle:l,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(T,{versionLabel:c.label,to:s.path,onClick:()=>o(c.name)})))}function _(e){let{className:t}=e;const n=(0,N.E)();return n.banner?a.createElement(Z,{className:t,versionMetadata:n}):null}function x(e){let{className:t}=e;const n=(0,N.E)();return n.badge?a.createElement("span",{className:(0,d.Z)(t,y.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(p.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}function w(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return a.createElement(p.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function H(e){let{lastUpdatedBy:t}=e;return a.createElement(p.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function A(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:l}=e;return a.createElement("span",{className:y.k.common.lastUpdated},a.createElement(p.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(w,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:l?a.createElement(H,{lastUpdatedBy:l}):""}},"Last updated{atDate}{byUser}"),!1)}const O={iconEdit:"iconEdit_bHB7"};function M(e){let{className:t,...n}=e;return a.createElement("svg",(0,u.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,d.Z)(O.iconEdit,t),"aria-hidden":"true"},n),a.createElement("g",null,a.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function B(e){let{editUrl:t}=e;return a.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:y.k.common.editThisPage},a.createElement(M,null),a.createElement(p.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}const U={tag:"tag_otG2",tagRegular:"tagRegular_s0E1",tagWithCount:"tagWithCount_PGyn"};function I(e){let{permalink:t,label:n,count:l}=e;return a.createElement(f.Z,{href:t,className:(0,d.Z)(U.tag,l?U.tagWithCount:U.tagRegular)},n,l&&a.createElement("span",null,l))}const S={tags:"tags_Ow0B",tag:"tag_DFxh"};function R(e){let{tags:t}=e;return a.createElement(a.Fragment,null,a.createElement("b",null,a.createElement(p.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),a.createElement("ul",{className:(0,d.Z)(S.tags,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:n}=e;return a.createElement("li",{key:n,className:S.tag},a.createElement(I,{label:t,permalink:n}))}))))}const P={lastUpdated:"lastUpdated_pbO5"};function z(e){return a.createElement("div",{className:(0,d.Z)(y.k.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(R,e)))}function j(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:r}=e;return a.createElement("div",{className:(0,d.Z)(y.k.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(B,{editUrl:t})),a.createElement("div",{className:(0,d.Z)("col",P.lastUpdated)},(n||l)&&a.createElement(A,{lastUpdatedAt:n,formattedLastUpdatedAt:r,lastUpdatedBy:l})))}function D(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:l,lastUpdatedBy:r,tags:o}=e,i=o.length>0,s=!!(t||n||r);return i||s?a.createElement("footer",{className:(0,d.Z)(y.k.docs.docFooter,"docusaurus-mt-lg")},i&&a.createElement(z,{tags:o}),s&&a.createElement(j,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:r,formattedLastUpdatedAt:l})):null}var V=n(4229),F=n(9899);function W(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function q(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=q({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function G(e){const t=e.getBoundingClientRect();return t.top===t.bottom?G(e.parentNode):t}function $(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>G(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function Q(e){const t=(0,a.useRef)(void 0),n=J();(0,a.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:o}=e;function i(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),i=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:o}),c=$(i,{anchorTopOffset:n.current}),s=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===s)}))}return document.addEventListener("scroll",i),document.addEventListener("resize",i),i(),()=>{document.removeEventListener("scroll",i),document.removeEventListener("resize",i)}}),[e,n])}function X(e){let{toc:t,className:n,linkClassName:l,isChild:r}=e;return t.length?a.createElement("ul",{className:r?void 0:n},t.map((e=>a.createElement("li",{key:e.id},a.createElement("a",{href:`#${e.id}`,className:l??void 0,dangerouslySetInnerHTML:{__html:e.value}}),a.createElement(X,{isChild:!0,toc:e.children,className:n,linkClassName:l}))))):null}const Y=a.memo(X);function K(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:r,minHeadingLevel:o,maxHeadingLevel:i,...c}=e;const s=(0,F.L)(),d=o??s.tableOfContents.minHeadingLevel,m=i??s.tableOfContents.maxHeadingLevel,p=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:l}=e;return(0,a.useMemo)((()=>q({toc:W(t),minHeadingLevel:n,maxHeadingLevel:l})),[t,n,l])}({toc:t,minHeadingLevel:d,maxHeadingLevel:m});return Q((0,a.useMemo)((()=>{if(l&&r)return{linkClassName:l,linkActiveClassName:r,minHeadingLevel:d,maxHeadingLevel:m}}),[l,r,d,m])),a.createElement(Y,(0,u.Z)({toc:p,className:n,linkClassName:l},c))}const ee={tocCollapsibleButton:"tocCollapsibleButton_iI2p",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_cHjC"};function te(e){let{collapsed:t,...n}=e;return a.createElement("button",(0,u.Z)({type:"button"},n,{className:(0,d.Z)("clean-btn",ee.tocCollapsibleButton,!t&&ee.tocCollapsibleButtonExpanded,n.className)}),a.createElement(p.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const ne={tocCollapsible:"tocCollapsible_wXna",tocCollapsibleContent:"tocCollapsibleContent_vea0",tocCollapsibleExpanded:"tocCollapsibleExpanded_BbRn"};function ae(e){let{toc:t,className:n,minHeadingLevel:l,maxHeadingLevel:r}=e;const{collapsed:o,toggleCollapsed:i}=(0,V.u)({initialState:!0});return a.createElement("div",{className:(0,d.Z)(ne.tocCollapsible,!o&&ne.tocCollapsibleExpanded,n)},a.createElement(te,{collapsed:o,onClick:i}),a.createElement(V.z,{lazy:!0,className:ne.tocCollapsibleContent,collapsed:o},a.createElement(K,{toc:t,minHeadingLevel:l,maxHeadingLevel:r})))}const le={tocMobile:"tocMobile_Ojys"};function re(){const{toc:e,frontMatter:t}=c();return a.createElement(ae,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,d.Z)(y.k.docs.docTocMobile,le.tocMobile)})}const oe={tableOfContents:"tableOfContents_XG6w",docItemContainer:"docItemContainer_Tr6w"},ie="table-of-contents__link toc-highlight",ce="table-of-contents__link--active";function se(e){let{className:t,...n}=e;return a.createElement("div",{className:(0,d.Z)(oe.tableOfContents,"thin-scrollbar",t)},a.createElement(K,(0,u.Z)({},n,{linkClassName:ie,linkActiveClassName:ce})))}function de(){const{toc:e,frontMatter:t}=c();return a.createElement(se,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:y.k.docs.docTocDesktop})}const me={anchorWithStickyNavbar:"anchorWithStickyNavbar_JmGV",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_pMLv"};function ue(e){let{as:t,id:n,...l}=e;const{navbar:{hideOnScroll:r}}=(0,F.L)();return"h1"!==t&&n?a.createElement(t,(0,u.Z)({},l,{className:(0,d.Z)("anchor",r?me.anchorWithHideOnScrollNavbar:me.anchorWithStickyNavbar),id:n}),l.children,a.createElement("a",{className:"hash-link",href:`#${n}`,title:(0,p.I)({id:"theme.common.headingLinkTitle",message:"Direct link to heading",description:"Title for link to heading"})},"\u200b")):a.createElement(t,(0,u.Z)({},l,{id:void 0}))}var pe=n(5318);const fe=e=>{let{children:t,...n}=e;const l=(0,a.useRef)(null),[r,o]=(0,a.useState)(!1);return a.createElement("pre",(0,u.Z)({},n,{ref:l}),t,a.createElement("button",{type:"button","aria-label":(0,p.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),className:"copy-button",onClick:()=>{l.current&&function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const a=document.createElement("textarea"),l=document.activeElement;a.value=e,a.setAttribute("readonly",""),a.style.contain="strict",a.style.position="absolute",a.style.left="-9999px",a.style.fontSize="12pt";const r=document.getSelection(),o=r.rangeCount>0&&r.getRangeAt(0);n.append(a),a.select(),a.selectionStart=0,a.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}a.remove(),o&&(r.removeAllRanges(),r.addRange(o)),l&&l.focus()}(Array.from(l.current.querySelectorAll("code div.line")).map((e=>e.textContent)).join("\n")),o(!0),setTimeout((()=>o(!1)),2e3)}},r?a.createElement(p.Z,{id:"theme.CodeBlock.copied",description:"The copied button label on code blocks"},"Copied"):a.createElement(p.Z,{id:"theme.CodeBlock.copy",description:"The copy button label on code blocks"},"Copy")))};var he=n(2750);var be=n(362);const ve={details:"details_IpIu",isBrowser:"isBrowser_QD4r",collapsibleContent:"collapsibleContent_Fd2D"};function ge(e){return!!e&&("SUMMARY"===e.tagName||ge(e.parentElement))}function Ee(e,t){return!!e&&(e===t||Ee(e.parentElement,t))}function ye(e){let{summary:t,children:n,...l}=e;const r=(0,be.Z)(),o=(0,a.useRef)(null),{collapsed:i,setCollapsed:c}=(0,V.u)({initialState:!l.open}),[s,m]=(0,a.useState)(l.open);return a.createElement("details",(0,u.Z)({},l,{ref:o,open:s,"data-collapsed":i,className:(0,d.Z)(ve.details,r&&ve.isBrowser,l.className),onMouseDown:e=>{ge(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;ge(t)&&Ee(t,o.current)&&(e.preventDefault(),i?(c(!1),m(!0)):c(!0))}}),t??a.createElement("summary",null,"Details"),a.createElement(V.z,{lazy:!1,collapsed:i,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{c(e),m(!e)}},a.createElement("div",{className:ve.collapsibleContent},n)))}const Ce={details:"details_jERq"},Ne="alert alert--info";function Le(e){let{...t}=e;return a.createElement(ye,(0,u.Z)({},t,{className:(0,d.Z)(Ne,Ce.details,t.className)}))}function ke(e){return a.createElement(ue,e)}const Te={containsTaskList:"containsTaskList_QWGu"};const Ze={img:"img_SS3x"};const _e="admonition_uH4V",xe="admonitionHeading_P5_N",we="admonitionIcon_MF44",He="admonitionContent_yySL";const Ae={note:{infimaClassName:"secondary",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:a.createElement(p.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:a.createElement(p.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:a.createElement(p.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:a.createElement(p.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 16 16"},a.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:a.createElement(p.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},Oe={secondary:"note",important:"info",success:"tip",warning:"danger"};function Me(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=a.Children.toArray(e),n=t.find((e=>a.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),l=a.createElement(a.Fragment,null,t.filter((e=>e!==n)));return{mdxAdmonitionTitle:n,rest:l}}(e.children);return{...e,title:e.title??t,children:n}}const Be={...{head:function(e){const t=a.Children.map(e.children,(e=>a.isValidElement(e)?function(e){if(e.props?.mdxType&&e.props.originalType){const{mdxType:t,originalType:n,...l}=e.props;return a.createElement(e.props.originalType,l)}return e}(e):e));return a.createElement(he.Z,e,t)},code:function(e){const t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return a.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")||(0,a.isValidElement)(e)&&t.includes(e.props?.mdxType)))?a.createElement("code",e):a.createElement(fe,e)},a:function(e){return a.createElement(f.Z,e)},pre:function(e){return a.createElement(fe,(0,a.isValidElement)(e.children)&&"code"===e.children.props?.originalType?e.children.props:{...e})},details:function(e){const t=a.Children.toArray(e.children),n=t.find((e=>a.isValidElement(e)&&"summary"===e.props?.mdxType)),l=a.createElement(a.Fragment,null,t.filter((e=>e!==n)));return a.createElement(Le,(0,u.Z)({},e,{summary:n}),l)},ul:function(e){return a.createElement("ul",(0,u.Z)({},e,{className:(t=e.className,(0,d.Z)(t,t?.includes("contains-task-list")&&Te.containsTaskList))}));var t},img:function(e){return a.createElement("img",(0,u.Z)({loading:"lazy"},e,{className:(t=e.className,(0,d.Z)(t,Ze.img))}));var t},h1:e=>a.createElement(ke,(0,u.Z)({as:"h1"},e)),h2:e=>a.createElement(ke,(0,u.Z)({as:"h2"},e)),h3:e=>a.createElement(ke,(0,u.Z)({as:"h3"},e)),h4:e=>a.createElement(ke,(0,u.Z)({as:"h4"},e)),h5:e=>a.createElement(ke,(0,u.Z)({as:"h5"},e)),h6:e=>a.createElement(ke,(0,u.Z)({as:"h6"},e)),admonition:function(e){const{children:t,type:n,title:l,icon:r}=Me(e),o=function(e){const t=Oe[e]??e,n=Ae[t];return n||(console.warn(`No admonition config found for admonition type "${t}". Using Info as fallback.`),Ae.info)}(n),i=l??o.label,{iconComponent:c}=o,s=r??a.createElement(c,null);return a.createElement("div",{className:(0,d.Z)(y.k.common.admonition,y.k.common.admonitionType(e.type),"alert",`alert--${o.infimaClassName}`,_e)},a.createElement("div",{className:xe},a.createElement("span",{className:we},s),i),a.createElement("div",{className:He},t))},mermaid:n(4453).Z},div:e=>"shiki-twoslash-fragment"===e.className?a.createElement(a.Fragment,null,e.children):a.createElement("div",e),pre:e=>a.createElement(fe,e),code:e=>a.createElement("code",e)};function Ue(e){let{children:t}=e;return a.createElement(pe.Zo,{components:Be},t)}function Ie(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return a.createElement("div",{className:(0,d.Z)(y.k.docs.docMarkdown,"markdown")},n&&a.createElement("header",null,a.createElement(ue,{as:"h1"},n)),a.createElement(Ue,null,t))}var Se=n(7470),Re=n(6440),Pe=n(1847);function ze(e){return a.createElement("svg",(0,u.Z)({viewBox:"0 0 24 24"},e),a.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const je={breadcrumbsContainer:"breadcrumbsContainer_T5ub",breadcrumbHomeIcon:"breadcrumbHomeIcon_GlTw"};function De(e){let{children:t,href:n,isLast:l}=e;const r="breadcrumbs__link";return l?a.createElement("span",{className:r,itemProp:"name"},t):n?a.createElement(f.Z,{className:r,href:n,itemProp:"item"},a.createElement("span",{itemProp:"name"},t)):a.createElement("span",{className:r},t)}function Ve(e){let{children:t,active:n,index:l,addMicrodata:r}=e;return a.createElement("li",(0,u.Z)({},r&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,d.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,a.createElement("meta",{itemProp:"position",content:String(l+1)}))}function Fe(){const e=(0,Pe.Z)("/");return a.createElement("li",{className:"breadcrumbs__item"},a.createElement(f.Z,{"aria-label":(0,p.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:(0,d.Z)("breadcrumbs__link",je.breadcrumbsItemLink),href:e},a.createElement(ze,{className:je.breadcrumbHomeIcon})))}function We(){const e=(0,Se.s1)(),t=(0,Re.Ns)();return e?a.createElement("nav",{className:(0,d.Z)(y.k.docs.docBreadcrumbs,je.breadcrumbsContainer),"aria-label":(0,p.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},a.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(Fe,null),e.map(((t,n)=>{const l=n===e.length-1;return a.createElement(Ve,{key:n,active:l,index:n,addMicrodata:!!t.href},a.createElement(De,{href:t.href,isLast:l},t.label))})))):null}const qe={docItemContainer:"docItemContainer_tjFy",docItemCol:"docItemCol_Qr34"};function Ge(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.i)(),l=e.hide_table_of_contents,r=!l&&t.length>0;return{hidden:l,mobile:r?a.createElement(re,null):void 0,desktop:!r||"desktop"!==n&&"ssr"!==n?void 0:a.createElement(de,null)}}();return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,d.Z)("col",!n.hidden&&qe.docItemCol)},a.createElement(_,null),a.createElement("div",{className:qe.docItemContainer},a.createElement("article",null,a.createElement(We,null),a.createElement(x,null),n.mobile,a.createElement(Ie,null,t),a.createElement(D,null)),a.createElement(v,null))),n.desktop&&a.createElement("div",{className:"col col--3"},n.desktop))}function $e(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,n=e.content;return a.createElement(i,{content:e.content},a.createElement(l.FG,{className:t},a.createElement(s,null),a.createElement(Ge,null,a.createElement(n,null))))}},5318:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var a=n(7378);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,l=e.mdxType,r=e.originalType,c=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),m=s(n),p=l,f=m["".concat(c,".").concat(p)]||m[p]||u[p]||r;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function f(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=n.length,o=new Array(r);o[0]=p;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i[m]="string"==typeof e?e:l,o[1]=i;for(var s=2;s{n.r(t),n.d(t,{default:()=>fe});var a=n(3696),l=n(8017),o=n(5605),r=n(3237),c=n(8721),i=n(8600),s=n(7294),d=n(4382),m=n(6436),u=n(6590),b=n(766),p=n(2432);const h={backToTopButton:"backToTopButton_iEvu",backToTopButtonShow:"backToTopButtonShow_DO8w"};function E(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,l]=(0,a.useState)(!1),o=(0,a.useRef)(!1),{startScroll:r,cancelScroll:c}=(0,b.gk)();return(0,b.Mq)(((e,n)=>{let{scrollY:a}=e;const r=n?.scrollY;r&&(o.current?o.current=!1:a>=r?(c(),l(!1)):a{e.location.hash&&(o.current=!0,l(!1))})),{shown:n,scrollToTop:()=>r(0)}}({threshold:300});return a.createElement("button",{"aria-label":(0,u.T)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,l.A)("clean-btn",r.G.common.backToTopButton,h.backToTopButton,e&&h.backToTopButtonShow),type:"button",onClick:t})}var f=n(9519),g=n(2575),v=n(7412),A=n(699),C=n(8102);function _(e){return a.createElement("svg",(0,C.A)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const k={collapseSidebarButton:"collapseSidebarButton_oTwn",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_pMEX"};function S(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.T)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.T)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,l.A)("button button--secondary button--outline",k.collapseSidebarButton),onClick:t},a.createElement(_,{className:k.collapseSidebarButtonIcon}))}var T=n(3043),I=n(5198);const N=Symbol("EmptyContext"),x=a.createContext(N);function B(e){let{children:t}=e;const[n,l]=(0,a.useState)(null),o=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:l})),[n]);return a.createElement(x.Provider,{value:o},t)}var y=n(51),w=n(4379),L=n(1611),M=n(6681);function H(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.T)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function P(e){let{item:t,onItemClick:n,activePath:o,level:c,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:E}}}=(0,v.p)(),f=function(e){const t=(0,M.A)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,i._o)(e):void 0),[e,t])}(t),g=(0,i.w8)(t,o),A=(0,w.ys)(h,o),{collapsed:_,setCollapsed:k}=(0,y.u)({initialState:()=>!!b&&(!g&&t.collapsed)}),{expandedItem:S,setExpandedItem:T}=function(){const e=(0,a.useContext)(x);if(e===N)throw new I.dV("DocSidebarItemsExpandedStateProvider");return e}(),B=function(e){void 0===e&&(e=!_),T(e?null:s),k(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:l}=e;const o=(0,I.ZC)(t);(0,a.useEffect)((()=>{t&&!o&&n&&l(!1)}),[t,o,n,l])}({isActive:g,collapsed:_,updateCollapsed:B}),(0,a.useEffect)((()=>{b&&null!=S&&S!==s&&E&&k(!0)}),[b,S,s,k,E]),a.createElement("li",{className:(0,l.A)(r.G.docs.docSidebarItemCategory,r.G.docs.docSidebarItemCategoryLevel(c),"menu__list-item",{"menu__list-item--collapsed":_},p)},a.createElement("div",{className:(0,l.A)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":A})},a.createElement(L.A,(0,C.A)({className:(0,l.A)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":g}),onClick:b?e=>{n?.(t),h?B(!1):(e.preventDefault(),B())}:()=>{n?.(t)},"aria-current":A?"page":void 0,"aria-expanded":b?!_:void 0,href:b?f??"#":f},d),u),h&&b&&a.createElement(H,{categoryLabel:u,onClick:e=>{e.preventDefault(),B()}})),a.createElement(y.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:_},a.createElement(U,{items:m,tabIndex:_?-1:0,onItemClick:n,activePath:o,level:c+1})))}var G=n(2616),W=n(9016);const F={menuExternalLink:"menuExternalLink_BiEj"};function R(e){let{item:t,onItemClick:n,activePath:o,level:c,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,i.w8)(t,o),E=(0,G.A)(m);return a.createElement("li",{className:(0,l.A)(r.G.docs.docSidebarItemLink,r.G.docs.docSidebarItemLinkLevel(c),"menu__list-item",b),key:u},a.createElement(L.A,(0,C.A)({className:(0,l.A)("menu__link",!E&&F.menuExternalLink,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},E&&{onClick:n?()=>n(t):void 0},d),u,!E&&a.createElement(W.A,null)))}const D={menuHtmlItem:"menuHtmlItem_OniL"};function z(e){let{item:t,level:n,index:o}=e;const{value:c,defaultStyle:i,className:s}=t;return a.createElement("li",{className:(0,l.A)(r.G.docs.docSidebarItemLink,r.G.docs.docSidebarItemLinkLevel(n),i&&[D.menuHtmlItem,"menu__list-item"],s),key:o,dangerouslySetInnerHTML:{__html:c}})}function Y(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(P,(0,C.A)({item:t},n));case"html":return a.createElement(z,(0,C.A)({item:t},n));default:return a.createElement(R,(0,C.A)({item:t},n))}}function j(e){let{items:t,...n}=e;return a.createElement(B,null,t.map(((e,t)=>a.createElement(Y,(0,C.A)({key:t,item:e,index:t},n)))))}const U=(0,a.memo)(j),O={menu:"menu_jmj1",menuWithAnnouncementBar:"menuWithAnnouncementBar_YufC"};function K(e){let{path:t,sidebar:n,className:o}=e;const c=function(){const{isActive:e}=(0,T.Mj)(),[t,n]=(0,a.useState)(e);return(0,b.Mq)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{className:(0,l.A)("menu thin-scrollbar",O.menu,c&&O.menuWithAnnouncementBar,o)},a.createElement("ul",{className:(0,l.A)(r.G.docs.docSidebarMenu,"menu__list")},a.createElement(U,{items:n,activePath:t,level:1})))}const V="sidebar_CUen",Z="sidebarWithHideableNavbar_w4KB",q="sidebarHidden_k6VE",X="sidebarLogo_CYvI";function J(e){let{path:t,sidebar:n,onCollapse:o,isHidden:r}=e;const{navbar:{hideOnScroll:c},docs:{sidebar:{hideable:i}}}=(0,v.p)();return a.createElement("div",{className:(0,l.A)(V,c&&Z,r&&q)},c&&a.createElement(A.A,{tabIndex:-1,className:X}),a.createElement(K,{path:t,sidebar:n}),i&&a.createElement(S,{onClick:o}))}const Q=a.memo(J);var $=n(5454),ee=n(5974);const te=e=>{let{sidebar:t,path:n}=e;const o=(0,ee.M)();return a.createElement("ul",{className:(0,l.A)(r.G.docs.docSidebarMenu,"menu__list")},a.createElement(U,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&o.toggle(),"link"===e.type&&o.toggle()},level:1}))};function ne(e){return a.createElement($.GX,{component:te,props:e})}const ae=a.memo(ne);function le(e){const t=(0,g.l)(),n="desktop"===t||"ssr"===t,l="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement(Q,e),l&&a.createElement(ae,e))}const oe={expandButton:"expandButton_YOoA",expandButtonIcon:"expandButtonIcon_GZLG"};function re(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:oe.expandButton,title:(0,u.T)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.T)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(_,{className:oe.expandButtonIcon}))}const ce={docSidebarContainer:"docSidebarContainer_y0RQ",docSidebarContainerHidden:"docSidebarContainerHidden_uArb"};function ie(e){let{children:t}=e;const n=(0,d.t)();return a.createElement(a.Fragment,{key:n?.name??"noSidebar"},t)}function se(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:o}=e;const{pathname:c}=(0,f.zy)(),[i,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{i&&s(!1),o((e=>!e))}),[o,i]);return a.createElement("aside",{className:(0,l.A)(r.G.docs.docSidebarContainer,ce.docSidebarContainer,n&&ce.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ce.docSidebarContainer)&&n&&s(!0)}},a.createElement(ie,null,a.createElement(le,{sidebar:t,path:c,onCollapse:d,isHidden:i})),i&&a.createElement(re,{toggleSidebar:d}))}const de={docMainContainer:"docMainContainer_sTIZ",docMainContainerEnhanced:"docMainContainerEnhanced_iSjt",docItemWrapperEnhanced:"docItemWrapperEnhanced_PxMR"};function me(e){let{hiddenSidebarContainer:t,children:n}=e;const o=(0,d.t)();return a.createElement("main",{className:(0,l.A)(de.docMainContainer,(t||!o)&&de.docMainContainerEnhanced)},a.createElement("div",{className:(0,l.A)("container padding-top--md padding-bottom--lg",de.docItemWrapper,t&&de.docItemWrapperEnhanced)},n))}const ue={docPage:"docPage_KLoz",docsWrapper:"docsWrapper_ct1J"};function be(e){let{children:t}=e;const n=(0,d.t)(),[l,o]=(0,a.useState)(!1);return a.createElement(m.A,{wrapperClassName:ue.docsWrapper},a.createElement(E,null),a.createElement("div",{className:ue.docPage},n&&a.createElement(se,{sidebar:n.items,hiddenSidebarContainer:l,setHiddenSidebarContainer:o}),a.createElement(me,{hiddenSidebarContainer:l},t)))}var pe=n(1840),he=n(689);function Ee(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(he.A,{version:t.version,tag:(0,c.tU)(t.pluginId,t.version)}),a.createElement(o.be,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function fe(e){const{versionMetadata:t}=e,n=(0,i.mz)(e);if(!n)return a.createElement(pe.default,null);const{docElement:c,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(Ee,e),a.createElement(o.e3,{className:(0,l.A)(r.G.wrapper.docsPages,r.G.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.n,{version:t},a.createElement(d.V,{name:m,items:u},a.createElement(be,null,c)))))}},1840:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var a=n(3696),l=n(6590),o=n(5605),r=n(6436);function c(){return a.createElement(a.Fragment,null,a.createElement(o.be,{title:(0,l.T)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.A,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.A,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/1be78505.eabfa853.js b/assets/js/1be78505.eabfa853.js deleted file mode 100644 index a12c852..0000000 --- a/assets/js/1be78505.eabfa853.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[514,287],{7467:(e,t,n)=>{n.r(t),n.d(t,{default:()=>fe});var a=n(7378),l=n(8944),o=n(8836),r=n(5854),c=n(2064),i=n(7470),s=n(2885),d=n(8774),m=n(81),u=n(7419),b=n(9169),p=n(6847);const h={backToTopButton:"backToTopButton_iEvu",backToTopButtonShow:"backToTopButtonShow_DO8w"};function E(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,l]=(0,a.useState)(!1),o=(0,a.useRef)(!1),{startScroll:r,cancelScroll:c}=(0,b.Ct)();return(0,b.RF)(((e,n)=>{let{scrollY:a}=e;const r=n?.scrollY;r&&(o.current?o.current=!1:a>=r?(c(),l(!1)):a{e.location.hash&&(o.current=!0,l(!1))})),{shown:n,scrollToTop:()=>r(0)}}({threshold:300});return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,l.Z)("clean-btn",r.k.common.backToTopButton,h.backToTopButton,e&&h.backToTopButtonShow),type:"button",onClick:t})}var f=n(3620),g=n(7980),k=n(9899),v=n(8340),_=n(2685);function C(e){return a.createElement("svg",(0,_.Z)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const S={collapseSidebarButton:"collapseSidebarButton_oTwn",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_pMEX"};function I(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,l.Z)("button button--secondary button--outline",S.collapseSidebarButton),onClick:t},a.createElement(C,{className:S.collapseSidebarButtonIcon}))}var N=n(4234),T=n(3879);const Z=Symbol("EmptyContext"),x=a.createContext(Z);function B(e){let{children:t}=e;const[n,l]=(0,a.useState)(null),o=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:l})),[n]);return a.createElement(x.Provider,{value:o},t)}var y=n(4229),w=n(6440),L=n(1191),A=n(362);function M(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function H(e){let{item:t,onItemClick:n,activePath:o,level:c,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:E}}}=(0,k.L)(),f=function(e){const t=(0,A.Z)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,i.Wl)(e):void 0),[e,t])}(t),g=(0,i._F)(t,o),v=(0,w.Mg)(h,o),{collapsed:C,setCollapsed:S}=(0,y.u)({initialState:()=>!!b&&(!g&&t.collapsed)}),{expandedItem:I,setExpandedItem:N}=function(){const e=(0,a.useContext)(x);if(e===Z)throw new T.i6("DocSidebarItemsExpandedStateProvider");return e}(),B=function(e){void 0===e&&(e=!C),N(e?null:s),S(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:l}=e;const o=(0,T.D9)(t);(0,a.useEffect)((()=>{t&&!o&&n&&l(!1)}),[t,o,n,l])}({isActive:g,collapsed:C,updateCollapsed:B}),(0,a.useEffect)((()=>{b&&null!=I&&I!==s&&E&&S(!0)}),[b,I,s,S,E]),a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemCategory,r.k.docs.docSidebarItemCategoryLevel(c),"menu__list-item",{"menu__list-item--collapsed":C},p)},a.createElement("div",{className:(0,l.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v})},a.createElement(L.Z,(0,_.Z)({className:(0,l.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":g}),onClick:b?e=>{n?.(t),h?B(!1):(e.preventDefault(),B())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":b?!C:void 0,href:b?f??"#":f},d),u),h&&b&&a.createElement(M,{categoryLabel:u,onClick:e=>{e.preventDefault(),B()}})),a.createElement(y.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:C},a.createElement(O,{items:m,tabIndex:C?-1:0,onItemClick:n,activePath:o,level:c+1})))}var F=n(4715),P=n(1858);const W={menuExternalLink:"menuExternalLink_BiEj"};function R(e){let{item:t,onItemClick:n,activePath:o,level:c,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,i._F)(t,o),E=(0,F.Z)(m);return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(c),"menu__list-item",b),key:u},a.createElement(L.Z,(0,_.Z)({className:(0,l.Z)("menu__link",!E&&W.menuExternalLink,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},E&&{onClick:n?()=>n(t):void 0},d),u,!E&&a.createElement(P.Z,null)))}const D={menuHtmlItem:"menuHtmlItem_OniL"};function Y(e){let{item:t,level:n,index:o}=e;const{value:c,defaultStyle:i,className:s}=t;return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(n),i&&[D.menuHtmlItem,"menu__list-item"],s),key:o,dangerouslySetInnerHTML:{__html:c}})}function z(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(H,(0,_.Z)({item:t},n));case"html":return a.createElement(Y,(0,_.Z)({item:t},n));default:return a.createElement(R,(0,_.Z)({item:t},n))}}function j(e){let{items:t,...n}=e;return a.createElement(B,null,t.map(((e,t)=>a.createElement(z,(0,_.Z)({key:t,item:e,index:t},n)))))}const O=(0,a.memo)(j),U={menu:"menu_jmj1",menuWithAnnouncementBar:"menuWithAnnouncementBar_YufC"};function V(e){let{path:t,sidebar:n,className:o}=e;const c=function(){const{isActive:e}=(0,N.nT)(),[t,n]=(0,a.useState)(e);return(0,b.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{className:(0,l.Z)("menu thin-scrollbar",U.menu,c&&U.menuWithAnnouncementBar,o)},a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(O,{items:n,activePath:t,level:1})))}const G="sidebar_CUen",K="sidebarWithHideableNavbar_w4KB",q="sidebarHidden_k6VE",J="sidebarLogo_CYvI";function Q(e){let{path:t,sidebar:n,onCollapse:o,isHidden:r}=e;const{navbar:{hideOnScroll:c},docs:{sidebar:{hideable:i}}}=(0,k.L)();return a.createElement("div",{className:(0,l.Z)(G,c&&K,r&&q)},c&&a.createElement(v.Z,{tabIndex:-1,className:J}),a.createElement(V,{path:t,sidebar:n}),i&&a.createElement(I,{onClick:o}))}const X=a.memo(Q);var $=n(197),ee=n(3367);const te=e=>{let{sidebar:t,path:n}=e;const o=(0,ee.e)();return a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(O,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&o.toggle(),"link"===e.type&&o.toggle()},level:1}))};function ne(e){return a.createElement($.Zo,{component:te,props:e})}const ae=a.memo(ne);function le(e){const t=(0,g.i)(),n="desktop"===t||"ssr"===t,l="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement(X,e),l&&a.createElement(ae,e))}const oe={expandButton:"expandButton_YOoA",expandButtonIcon:"expandButtonIcon_GZLG"};function re(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:oe.expandButton,title:(0,u.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(C,{className:oe.expandButtonIcon}))}const ce={docSidebarContainer:"docSidebarContainer_y0RQ",docSidebarContainerHidden:"docSidebarContainerHidden_uArb"};function ie(e){let{children:t}=e;const n=(0,d.V)();return a.createElement(a.Fragment,{key:n?.name??"noSidebar"},t)}function se(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:o}=e;const{pathname:c}=(0,f.TH)(),[i,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{i&&s(!1),o((e=>!e))}),[o,i]);return a.createElement("aside",{className:(0,l.Z)(r.k.docs.docSidebarContainer,ce.docSidebarContainer,n&&ce.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ce.docSidebarContainer)&&n&&s(!0)}},a.createElement(ie,null,a.createElement(le,{sidebar:t,path:c,onCollapse:d,isHidden:i})),i&&a.createElement(re,{toggleSidebar:d}))}const de={docMainContainer:"docMainContainer_sTIZ",docMainContainerEnhanced:"docMainContainerEnhanced_iSjt",docItemWrapperEnhanced:"docItemWrapperEnhanced_PxMR"};function me(e){let{hiddenSidebarContainer:t,children:n}=e;const o=(0,d.V)();return a.createElement("main",{className:(0,l.Z)(de.docMainContainer,(t||!o)&&de.docMainContainerEnhanced)},a.createElement("div",{className:(0,l.Z)("container padding-top--md padding-bottom--lg",de.docItemWrapper,t&&de.docItemWrapperEnhanced)},n))}const ue={docPage:"docPage_KLoz",docsWrapper:"docsWrapper_ct1J"};function be(e){let{children:t}=e;const n=(0,d.V)(),[l,o]=(0,a.useState)(!1);return a.createElement(m.Z,{wrapperClassName:ue.docsWrapper},a.createElement(E,null),a.createElement("div",{className:ue.docPage},n&&a.createElement(se,{sidebar:n.items,hiddenSidebarContainer:l,setHiddenSidebarContainer:o}),a.createElement(me,{hiddenSidebarContainer:l},t)))}var pe=n(8287),he=n(4386);function Ee(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(he.Z,{version:t.version,tag:(0,c.os)(t.pluginId,t.version)}),a.createElement(o.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function fe(e){const{versionMetadata:t}=e,n=(0,i.hI)(e);if(!n)return a.createElement(pe.default,null);const{docElement:c,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(Ee,e),a.createElement(o.FG,{className:(0,l.Z)(r.k.wrapper.docsPages,r.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(be,null,c)))))}},8287:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var a=n(7378),l=n(7419),o=n(8836),r=n(81);function c(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/287.2af51d35.js b/assets/js/287.2af51d35.js deleted file mode 100644 index cc858fd..0000000 --- a/assets/js/287.2af51d35.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[287],{8287:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(7378),l=n(7419),o=n(8836),r=n(81);function i(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/2bc78064.4452a6cd.js b/assets/js/2bc78064.4452a6cd.js new file mode 100644 index 0000000..b9f244f --- /dev/null +++ b/assets/js/2bc78064.4452a6cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[575],{9916:(e,t,a)=>{a.d(t,{xA:()=>y,yg:()=>u});var n=a(3696);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),l=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},y=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,y=s(e,["components","mdxType","originalType","parentName"]),c=l(a),g=r,u=c["".concat(p,".").concat(g)]||c[g]||d[g]||o;return a?n.createElement(u,i(i({ref:t},y),{},{components:a})):n.createElement(u,i({ref:t},y))}));function u(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=g;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var l=2;l{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var n=a(8102),r=(a(3696),a(9916));const o={sidebar_position:3},i="Type-checked ESLint rules",s={unversionedId:"typescript/type-checked",id:"typescript/type-checked",title:"Type-checked ESLint rules",description:"Operators",source:"@site/../docs/typescript/type-checked.md",sourceDirName:"typescript",slug:"/typescript/type-checked",permalink:"/js-style-guide/typescript/type-checked",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"defaultSidebar",previous:{title:"TypeScript",permalink:"/js-style-guide/typescript/base"}},p={},l=[{value:"Operators",id:"operators",level:2},{value:"dot-notation",id:"dot-notation",level:3},{value:"Async operations",id:"async-operations",level:2},{value:"await-thenable",id:"await-thenable",level:3},{value:"Modules",id:"modules",level:2},{value:"consistent-type-exports",id:"consistent-type-exports",level:3}],y={toc:l},c="wrapper";function d(e){let{components:t,...a}=e;return(0,r.yg)(c,(0,n.A)({},y,a,{components:t,mdxType:"MDXLayout"}),(0,r.yg)("h1",{id:"type-checked-eslint-rules"},"Type-checked ESLint rules"),(0,r.yg)("h2",{id:"operators"},"Operators"),(0,r.yg)("h3",{id:"dot-notation"},(0,r.yg)("a",{parentName:"h3",href:"ttps://typescript-eslint.io/rules/dot-notation/"},(0,r.yg)("inlineCode",{parentName:"a"},"dot-notation"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/js-style-guide/eslint-base/operators#dot-notation"},(0,r.yg)("inlineCode",{parentName:"a"},"dot-notation")))))),(0,r.yg)("p",null,"Never use bracket notation to access properties. In TypeScript, we don't use ",(0,r.yg)("inlineCode",{parentName:"p"},"private")," or ",(0,r.yg)("inlineCode",{parentName:"p"},"protected"),", and even in such case, do not access them outside of the class (even in tests). Tests should be for public-facing behavior. We also don't enable the ",(0,r.yg)("inlineCode",{parentName:"p"},"noPropertyAccessFromIndexSignature")," option, so you should access index signatures with dot notation."),(0,r.yg)("h2",{id:"async-operations"},"Async operations"),(0,r.yg)("h3",{id:"await-thenable"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/await-thenable/"},(0,r.yg)("inlineCode",{parentName:"a"},"await-thenable"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"You should only await on values that may be thenable. A value that is definitely not thenable should not be awaited because it makes the code harder to track and also defers all remaining code to the next tick."),(0,r.yg)("h2",{id:"modules"},"Modules"),(0,r.yg)("h3",{id:"consistent-type-exports"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/consistent-type-exports/"},(0,r.yg)("inlineCode",{parentName:"a"},"consistent-type-exports"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Fix with inline type specifiers (",(0,r.yg)("inlineCode",{parentName:"li"},"fixMixedExportsWithInlineTypeSpecifier: true"),")")))),(0,r.yg)("p",null,"Types should always be exported with ",(0,r.yg)("inlineCode",{parentName:"p"},"export type")," for consistency reasons. In fact, you should generally use"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"export"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"type"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"Type1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"export"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"interface"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"Type2"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"export"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"type"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"Type1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"export"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"interface"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"Type2"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {}")))))),(0,r.yg)("p",null,"Instead of a separate ",(0,r.yg)("inlineCode",{parentName:"p"},"export type { Type1, Type2 };")," statement."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2bc78064.d00ebaad.js b/assets/js/2bc78064.d00ebaad.js deleted file mode 100644 index 25dd27c..0000000 --- a/assets/js/2bc78064.d00ebaad.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[720],{9019:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>y,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var n=a(2685),r=(a(7378),a(5318));const o={sidebar_position:3},i="Type-checked ESLint rules",s={unversionedId:"typescript/type-checked",id:"typescript/type-checked",title:"Type-checked ESLint rules",description:"Operators",source:"@site/../docs/typescript/type-checked.md",sourceDirName:"typescript",slug:"/typescript/type-checked",permalink:"/js-style-guide/typescript/type-checked",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"defaultSidebar",previous:{title:"TypeScript",permalink:"/js-style-guide/typescript/base"}},p={},l=[{value:"Operators",id:"operators",level:2},{value:"dot-notation",id:"dot-notation",level:3},{value:"Async operations",id:"async-operations",level:2},{value:"await-thenable",id:"await-thenable",level:3},{value:"Modules",id:"modules",level:2},{value:"consistent-type-exports",id:"consistent-type-exports",level:3}],c={toc:l},d="wrapper";function y(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"type-checked-eslint-rules"},"Type-checked ESLint rules"),(0,r.kt)("h2",{id:"operators"},"Operators"),(0,r.kt)("h3",{id:"dot-notation"},(0,r.kt)("a",{parentName:"h3",href:"ttps://typescript-eslint.io/rules/dot-notation/"},(0,r.kt)("inlineCode",{parentName:"a"},"dot-notation"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off"),(0,r.kt)("li",{parentName:"ul"},"Related:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/js-style-guide/eslint-base/operators#dot-notation"},(0,r.kt)("inlineCode",{parentName:"a"},"dot-notation")))))),(0,r.kt)("p",null,"Never use bracket notation to access properties. In TypeScript, we don't use ",(0,r.kt)("inlineCode",{parentName:"p"},"private")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"protected"),", and even in such case, do not access them outside of the class (even in tests). Tests should be for public-facing behavior. We also don't enable the ",(0,r.kt)("inlineCode",{parentName:"p"},"noPropertyAccessFromIndexSignature")," option, so you should access index signatures with dot notation."),(0,r.kt)("h2",{id:"async-operations"},"Async operations"),(0,r.kt)("h3",{id:"await-thenable"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/await-thenable/"},(0,r.kt)("inlineCode",{parentName:"a"},"await-thenable"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"You should only await on values that may be thenable. A value that is definitely not thenable should not be awaited because it makes the code harder to track and also defers all remaining code to the next tick."),(0,r.kt)("h2",{id:"modules"},"Modules"),(0,r.kt)("h3",{id:"consistent-type-exports"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/consistent-type-exports/"},(0,r.kt)("inlineCode",{parentName:"a"},"consistent-type-exports"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Fix with inline type specifiers (",(0,r.kt)("inlineCode",{parentName:"li"},"fixMixedExportsWithInlineTypeSpecifier: true"),")")))),(0,r.kt)("p",null,"Types should always be exported with ",(0,r.kt)("inlineCode",{parentName:"p"},"export type")," for consistency reasons. In fact, you should generally use"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"export"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"type"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"Type1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"export"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"interface"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"Type2"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"export"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"type"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"Type1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"export"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"interface"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"Type2"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {}")))))),(0,r.kt)("p",null,"Instead of a separate ",(0,r.kt)("inlineCode",{parentName:"p"},"export type { Type1, Type2 };")," statement."))}y.isMDXComponent=!0},5318:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(7378);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),l=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},d="mdxType",y={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=l(a),u=r,m=d["".concat(p,".").concat(u)]||d[u]||y[u]||o;return a?n.createElement(m,i(i({ref:t},c),{},{components:a})):n.createElement(m,i({ref:t},c))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=u;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[d]="string"==typeof e?e:r,i[1]=s;for(var l=2;l{r.d(t,{Z:()=>b});var n=r(7378),i=r(8944),c=r(7470),o=r(1191),a=r(4715),s=r(7419);const l={cardContainer:"cardContainer_H47c",cardTitle:"cardTitle_tTnA",cardDescription:"cardDescription_rTl4"};function p(e){let{href:t,children:r}=e;return n.createElement(o.Z,{href:t,className:(0,i.Z)("card padding--lg",l.cardContainer)},r)}function u(e){let{href:t,icon:r,title:c,description:o}=e;return n.createElement(p,{href:t},n.createElement("h2",{className:(0,i.Z)("text--truncate",l.cardTitle),title:c},r," ",c),o&&n.createElement("p",{className:(0,i.Z)("text--truncate",l.cardDescription),title:o},o))}function m(e){let{item:t}=e;const r=(0,c.Wl)(t);return r?n.createElement(u,{href:r,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:(0,s.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function d(e){let{item:t}=e;const r=(0,a.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",i=(0,c.xz)(t.docId??void 0);return n.createElement(u,{href:t.href,icon:r,title:t.label,description:i?.description})}function f(e){let{item:t}=e;switch(t.type){case"link":return n.createElement(d,{item:t});case"category":return n.createElement(m,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function y(e){let{className:t}=e;const r=(0,c.jA)();return n.createElement(b,{items:r.items,className:t})}function b(e){const{items:t,className:r}=e;if(!t)return n.createElement(y,e);const o=(0,c.MN)(t);return n.createElement("section",{className:(0,i.Z)("row",r)},o.map(((e,t)=>n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e})))))}},4783:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var n=r(2685),i=(r(7378),r(5318)),c=r(3818);const o={sidebar_position:2},a="typescript-eslint rules",s={unversionedId:"typescript/index",id:"typescript/index",title:"typescript-eslint rules",description:"This page introduces rules from the typescript-eslint plugin.",source:"@site/../docs/typescript/index.md",sourceDirName:"typescript",slug:"/typescript/",permalink:"/js-style-guide/typescript/",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"defaultSidebar",previous:{title:"Modules",permalink:"/js-style-guide/eslint-base/modules"},next:{title:"TypeScript",permalink:"/js-style-guide/typescript/base"}},l={},p=[],u={toc:p},m="wrapper";function d(e){let{components:t,...r}=e;return(0,i.kt)(m,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"typescript-eslint-rules"},"typescript-eslint rules"),(0,i.kt)("p",null,"This page introduces rules from the typescript-eslint plugin."),(0,i.kt)(c.Z,{mdxType:"DocCardList"}))}d.isMDXComponent=!0},5318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7378);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,c=e.originalType,s=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),u=l(r),d=i,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||c;return r?n.createElement(f,o(o({ref:t},p),{},{components:r})):n.createElement(f,o({ref:t},p))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var c=r.length,o=new Array(c);o[0]=d;var a={};for(var s in t)hasOwnProperty.call(t,s)&&(a[s]=t[s]);a.originalType=e,a[u]="string"==typeof e?e:i,o[1]=a;for(var l=2;l{r.d(t,{xA:()=>p,yg:()=>f});var n=r(3696);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,c=e.originalType,s=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),u=l(r),m=i,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||c;return r?n.createElement(f,o(o({ref:t},p),{},{components:r})):n.createElement(f,o({ref:t},p))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var c=r.length,o=new Array(c);o[0]=m;var a={};for(var s in t)hasOwnProperty.call(t,s)&&(a[s]=t[s]);a.originalType=e,a[u]="string"==typeof e?e:i,o[1]=a;for(var l=2;l{r.d(t,{A:()=>g});var n=r(3696),i=r(8017),c=r(8600),o=r(1611),a=r(2616),s=r(6590);const l={cardContainer:"cardContainer_H47c",cardTitle:"cardTitle_tTnA",cardDescription:"cardDescription_rTl4"};function p(e){let{href:t,children:r}=e;return n.createElement(o.A,{href:t,className:(0,i.A)("card padding--lg",l.cardContainer)},r)}function u(e){let{href:t,icon:r,title:c,description:o}=e;return n.createElement(p,{href:t},n.createElement("h2",{className:(0,i.A)("text--truncate",l.cardTitle),title:c},r," ",c),o&&n.createElement("p",{className:(0,i.A)("text--truncate",l.cardDescription),title:o},o))}function d(e){let{item:t}=e;const r=(0,c._o)(t);return r?n.createElement(u,{href:r,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:(0,s.T)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function m(e){let{item:t}=e;const r=(0,a.A)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",i=(0,c.cC)(t.docId??void 0);return n.createElement(u,{href:t.href,icon:r,title:t.label,description:i?.description})}function f(e){let{item:t}=e;switch(t.type){case"link":return n.createElement(m,{item:t});case"category":return n.createElement(d,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function y(e){let{className:t}=e;const r=(0,c.$S)();return n.createElement(g,{items:r.items,className:t})}function g(e){const{items:t,className:r}=e;if(!t)return n.createElement(y,e);const o=(0,c.d1)(t);return n.createElement("section",{className:(0,i.A)("row",r)},o.map(((e,t)=>n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e})))))}},2860:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var n=r(8102),i=(r(3696),r(9916)),c=r(3480);const o={sidebar_position:2},a="typescript-eslint rules",s={unversionedId:"typescript/index",id:"typescript/index",title:"typescript-eslint rules",description:"This page introduces rules from the typescript-eslint plugin.",source:"@site/../docs/typescript/index.md",sourceDirName:"typescript",slug:"/typescript/",permalink:"/js-style-guide/typescript/",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"defaultSidebar",previous:{title:"Modules",permalink:"/js-style-guide/eslint-base/modules"},next:{title:"TypeScript",permalink:"/js-style-guide/typescript/base"}},l={},p=[],u={toc:p},d="wrapper";function m(e){let{components:t,...r}=e;return(0,i.yg)(d,(0,n.A)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,i.yg)("h1",{id:"typescript-eslint-rules"},"typescript-eslint rules"),(0,i.yg)("p",null,"This page introduces rules from the typescript-eslint plugin."),(0,i.yg)(c.A,{mdxType:"DocCardList"}))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3c9c65c3.19c67f7a.js b/assets/js/3c9c65c3.19c67f7a.js new file mode 100644 index 0000000..a8dcbc2 --- /dev/null +++ b/assets/js/3c9c65c3.19c67f7a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[480],{9916:(e,a,n)=>{n.d(a,{xA:()=>y,yg:()=>m});var l=n(3696);function t(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function r(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);a&&(l=l.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,l)}return n}function o(e){for(var a=1;a=0||(t[n]=e[n]);return t}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(t[n]=e[n])}return t}var i=l.createContext({}),p=function(e){var a=l.useContext(i),n=a;return e&&(n="function"==typeof e?e(a):o(o({},a),e)),n},y=function(e){var a=p(e.components);return l.createElement(i.Provider,{value:a},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var a=e.children;return l.createElement(l.Fragment,{},a)}},g=l.forwardRef((function(e,a){var n=e.components,t=e.mdxType,r=e.originalType,i=e.parentName,y=s(e,["components","mdxType","originalType","parentName"]),d=p(n),g=t,m=d["".concat(i,".").concat(g)]||d[g]||c[g]||r;return n?l.createElement(m,o(o({ref:a},y),{},{components:n})):l.createElement(m,o({ref:a},y))}));function m(e,a){var n=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var r=n.length,o=new Array(r);o[0]=g;var s={};for(var i in a)hasOwnProperty.call(a,i)&&(s[i]=a[i]);s.originalType=e,s[d]="string"==typeof e?e:t,o[1]=s;for(var p=2;p{n.r(a),n.d(a,{assets:()=>i,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var l=n(8102),t=(n(3696),n(9916));const r={sidebar_position:3},o="Variables & names",s={unversionedId:"eslint-base/variables-names",id:"eslint-base/variables-names",title:"Variables & names",description:"This page discusses rules around variable declaration, use of properties, and naming.",source:"@site/../docs/eslint-base/variables-names.md",sourceDirName:"eslint-base",slug:"/eslint-base/variables-names",permalink:"/js-style-guide/eslint-base/variables-names",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"defaultSidebar",previous:{title:"Literals",permalink:"/js-style-guide/eslint-base/literals"},next:{title:"Operators",permalink:"/js-style-guide/eslint-base/operators"}},i={},p=[{value:"Variable declarations",id:"variable-declarations",level:2},{value:"block-scoped-var",id:"block-scoped-var",level:3},{value:"init-declarations",id:"init-declarations",level:3},{value:"no-const-assign",id:"no-const-assign",level:3},{value:"no-implicit-globals",id:"no-implicit-globals",level:3},{value:"no-redeclare",id:"no-redeclare",level:3},{value:"no-shadow",id:"no-shadow",level:3},{value:"no-var",id:"no-var",level:3},{value:"no-undef-init",id:"no-undef-init",level:3},{value:"no-unused-vars",id:"no-unused-vars",level:3},{value:"no-use-before-define",id:"no-use-before-define",level:3},{value:"no-useless-rename",id:"no-useless-rename",level:3},{value:"one-var",id:"one-var",level:3},{value:"prefer-const",id:"prefer-const",level:3},{value:"prefer-destructuring",id:"prefer-destructuring",level:3},{value:"vars-on-top",id:"vars-on-top",level:3},{value:"Naming conventions",id:"naming-conventions",level:2},{value:"camelcase",id:"camelcase",level:3},{value:"id-denylist",id:"id-denylist",level:3},{value:"id-length",id:"id-length",level:3},{value:"id-match",id:"id-match",level:3},{value:"no-shadow-restricted-names",id:"no-shadow-restricted-names",level:3},{value:"no-underscore-dangle",id:"no-underscore-dangle",level:3},{value:"Globals",id:"globals",level:2},{value:"no-alert",id:"no-alert",level:3},{value:"no-console",id:"no-console",level:3},{value:"no-eval",id:"no-eval",level:3},{value:"no-global-assign",id:"no-global-assign",level:3},{value:"no-implied-eval",id:"no-implied-eval",level:3},{value:"no-iterator",id:"no-iterator",level:3},{value:"no-new-func",id:"no-new-func",level:3},{value:"no-new-native-nonconstructor",id:"no-new-native-nonconstructor",level:3},{value:"no-new-wrappers",id:"no-new-wrappers",level:3},{value:"no-obj-calls",id:"no-obj-calls",level:3},{value:"no-object-constructor",id:"no-object-constructor",level:3},{value:"no-proto",id:"no-proto",level:3},{value:"no-prototype-builtins",id:"no-prototype-builtins",level:3},{value:"no-restricted-properties",id:"no-restricted-properties",level:3},{value:"no-undef",id:"no-undef",level:3},{value:"no-undefined",id:"no-undefined",level:3},{value:"prefer-object-has-own",id:"prefer-object-has-own",level:3}],y={toc:p},d="wrapper";function c(e){let{components:a,...n}=e;return(0,t.yg)(d,(0,l.A)({},y,n,{components:a,mdxType:"MDXLayout"}),(0,t.yg)("h1",{id:"variables--names"},"Variables & names"),(0,t.yg)("p",null,"This page discusses rules around variable declaration, use of properties, and naming."),(0,t.yg)("h2",{id:"variable-declarations"},"Variable declarations"),(0,t.yg)("h3",{id:"block-scoped-var"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/block-scoped-var"},(0,t.yg)("inlineCode",{parentName:"a"},"block-scoped-var"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Because ",(0,t.yg)("inlineCode",{parentName:"p"},"var"),"s are forbidden altogether, this rule is mostly moot. In the rare case where you need to use ",(0,t.yg)("inlineCode",{parentName:"p"},"var")," (such as to declare globals), such vars should not be deceptively inside a block."),(0,t.yg)("h3",{id:"init-declarations"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/init-declarations"},(0,t.yg)("inlineCode",{parentName:"a"},"init-declarations"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Disabled by the ",(0,t.yg)("a",{parentName:"li",href:"/js-style-guide/typescript/base"},"typescript")," config"),(0,t.yg)("li",{parentName:"ul"},"Configuration:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Require variables to be initialized (",(0,t.yg)("inlineCode",{parentName:"li"},'"always"'),")"))),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("a",{parentName:"li",href:"/js-style-guide/typescript/base#init-declarations"},(0,t.yg)("inlineCode",{parentName:"a"},"@typescript-eslint/init-declarations"))),(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"ts(2454): Variable 'a' is used before being assigned."))))),(0,t.yg)("p",null,"We require variables to be initialized. Otherwise, it's possible to circumvent TypeScript:"),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,t.yg)("data-lsp",{parentName:"span",lsp:"let a: number"},"a")),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,t.yg)("data-lsp",{parentName:"span",lsp:"function useA(): void"},"useA")),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,t.yg)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,t.yg)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,t.yg)("data-lsp",{parentName:"span",lsp:"let a: number"},"a"),"); "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> undefined")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,t.yg)("data-lsp",{parentName:"span",lsp:"function useA(): void"},"useA")),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},(0,t.yg)("data-lsp",{parentName:"span",lsp:"let a: number"},"a")," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},";"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,t.yg)("data-lsp",{parentName:"span",lsp:"let a: number"},"a")),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,t.yg)("data-lsp",{parentName:"span",lsp:"function useA(): void"},"useA")),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,t.yg)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,t.yg)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,t.yg)("data-lsp",{parentName:"span",lsp:"let a: number"},"a"),"); "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> undefined")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,t.yg)("data-lsp",{parentName:"span",lsp:"function useA(): void"},"useA")),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,t.yg)("data-lsp",{parentName:"span",lsp:"let a: number"},"a")," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")))))),(0,t.yg)("p",null,"You should almost always initialize variables upfront (and use ",(0,t.yg)("inlineCode",{parentName:"p"},"const")," where possible). Use ternaries instead of ",(0,t.yg)("inlineCode",{parentName:"p"},"if...else"),". If you need to lazy initialize a variable, initialize it to ",(0,t.yg)("inlineCode",{parentName:"p"},"undefined"),", so that you remember to explicitly check for ",(0,t.yg)("inlineCode",{parentName:"p"},"undefined")," before using it."),(0,t.yg)("h3",{id:"no-const-assign"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-const-assign"},(0,t.yg)("inlineCode",{parentName:"a"},"no-const-assign"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"ts(2588): Cannot assign to 'a' because it is a constant."))))),(0,t.yg)("p",null,"Re-assigning const variables causes a runtime error."),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,t.yg)("data-lsp",{parentName:"span",lsp:"const a: 1"},"a")),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},(0,t.yg)("data-err",{parentName:"span"},(0,t.yg)("data-lsp",{parentName:"data-err",lsp:"const a: any"},"a"))," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> TypeError: Assignment to constant variable.")),(0,t.yg)("span",{parentName:"code",className:"error"},(0,t.yg)("span",{parentName:"span"},"Cannot assign to 'a' because it is a constant."),(0,t.yg)("span",{parentName:"span",className:"code"},"2588")),(0,t.yg)("span",{parentName:"code",className:"error-behind"},"Cannot assign to 'a' because it is a constant.")))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,t.yg)("data-lsp",{parentName:"span",lsp:"const a: 1"},"a")),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,t.yg)("data-err",{parentName:"span"},(0,t.yg)("data-lsp",{parentName:"data-err",lsp:"const a: any"},"a"))," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> TypeError: Assignment to constant variable.")),(0,t.yg)("span",{parentName:"code",className:"error"},(0,t.yg)("span",{parentName:"span"},"Cannot assign to 'a' because it is a constant."),(0,t.yg)("span",{parentName:"span",className:"code"},"2588")),(0,t.yg)("span",{parentName:"code",className:"error-behind"},"Cannot assign to 'a' because it is a constant."))))),(0,t.yg)("h3",{id:"no-implicit-globals"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-implicit-globals"},(0,t.yg)("inlineCode",{parentName:"a"},"no-implicit-globals"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Configuration:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Disallow global lexical declarations too (",(0,t.yg)("inlineCode",{parentName:"li"},"lexicalBindings: true"),")")))),(0,t.yg)("p",null,"We have forbidden using ",(0,t.yg)("inlineCode",{parentName:"p"},"var"),". ",(0,t.yg)("inlineCode",{parentName:"p"},"let")," and ",(0,t.yg)("inlineCode",{parentName:"p"},"const")," at the top level also behave weirdly due to TDZ. You should probably be modularizing your code anyway."),(0,t.yg)("h3",{id:"no-redeclare"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-redeclare"},(0,t.yg)("inlineCode",{parentName:"a"},"no-redeclare"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Configuration:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Check redeclaration of globals (",(0,t.yg)("inlineCode",{parentName:"li"},"builtinGlobals: false"),")"))),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("a",{parentName:"li",href:"/js-style-guide/typescript/base#no-redeclare"},(0,t.yg)("inlineCode",{parentName:"a"},"@typescript-eslint/no-redeclare")))))),(0,t.yg)("p",null,"Do not redeclare ",(0,t.yg)("inlineCode",{parentName:"p"},"var"),"/",(0,t.yg)("inlineCode",{parentName:"p"},"function"),". This is probably a mistake. Note that ",(0,t.yg)("inlineCode",{parentName:"p"},"let"),"/",(0,t.yg)("inlineCode",{parentName:"p"},"const")," cannot be redeclared and doing so is a syntax error in the first place."),(0,t.yg)("h3",{id:"no-shadow"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-shadow"},(0,t.yg)("inlineCode",{parentName:"a"},"no-shadow"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: warning"),(0,t.yg)("li",{parentName:"ul"},"Configuration:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Ignore shadowing of globals (",(0,t.yg)("inlineCode",{parentName:"li"},"builtinGlobals: true"),")"),(0,t.yg)("li",{parentName:"ul"},"Check shadowing of all variables declared in the outer scope (",(0,t.yg)("inlineCode",{parentName:"li"},'hoist: "all"'),")"),(0,t.yg)("li",{parentName:"ul"},"Allow shadowing of uninitialized variables (",(0,t.yg)("inlineCode",{parentName:"li"},"ignoreOnInitialization: true"),")")))),(0,t.yg)("p",null,"We avoid shadowing because doing so is a refactoring hazard."),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#953800"}},"x"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomething"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(("),(0,t.yg)("span",{parentName:"div",style:{color:"#953800"}},"x"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(x); "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// What is this x meant to be?")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// If I change the parameter name, should I change this too?")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," });")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"x"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomething"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(("),(0,t.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"x"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(x); "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// What is this x meant to be?")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// If I change the parameter name, should I change this too?")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," });")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,t.yg)("p",null,"The issue isn't better because the variable is only declared afterwards."),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomething"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(("),(0,t.yg)("span",{parentName:"div",style:{color:"#953800"}},"x"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(x); "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// What is this x meant to be?")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// If I change the parameter name, should I change this too?")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," });")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// If I move this declaration before doSomething(), there")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// shouldn't be a difference")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"x"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomething"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(("),(0,t.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"x"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(x); "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// What is this x meant to be?")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// If I change the parameter name, should I change this too?")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," });")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// If I move this declaration before doSomething(), there")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// shouldn't be a difference")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"x"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,t.yg)("p",null,"However, shadowing is allowed when the variable is initialized later. The following pattern is encouraged:"),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"x"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (() "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," x "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," x;")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"})();"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"x"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (() "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," x "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," x;")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"})();")))))),(0,t.yg)("p",null,"We allow shadowing globals\u2014this is for a pragmatic concern. There are some extremely generically named globals like ",(0,t.yg)("inlineCode",{parentName:"p"},"name")," and ",(0,t.yg)("inlineCode",{parentName:"p"},"Plugin")," which we don't want to prevented from being used as local variables. However, you should probably avoid using names like ",(0,t.yg)("inlineCode",{parentName:"p"},"fetch"),"."),(0,t.yg)("h3",{id:"no-var"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-var"},(0,t.yg)("inlineCode",{parentName:"a"},"no-var"))),(0,t.yg)("p",null,"We disallow ",(0,t.yg)("inlineCode",{parentName:"p"},"var")," statements. ",(0,t.yg)("inlineCode",{parentName:"p"},"var")," is fully predated by ",(0,t.yg)("inlineCode",{parentName:"p"},"let"),"/",(0,t.yg)("inlineCode",{parentName:"p"},"const")," and its hoisting behavior makes code harder to debug. There's not a single reason to use ",(0,t.yg)("inlineCode",{parentName:"p"},"var")," today. If you need to share one variable between two blocks, declare it in the upper scope. If you need to declare a global variable (which you probably shouldn't anyway), directly modify ",(0,t.yg)("inlineCode",{parentName:"p"},"globalThis")," (which also works in modules)."),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"declare"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"var"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,t.yg)("data-lsp",{parentName:"span",lsp:"var globalVar: number"},"globalVar")),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},(0,t.yg)("data-lsp",{parentName:"span",lsp:"module globalThis"},"globalThis"),".",(0,t.yg)("data-lsp",{parentName:"span",lsp:"var globalVar: number"},"globalVar")," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},";"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"declare"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"var"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,t.yg)("data-lsp",{parentName:"span",lsp:"var globalVar: number"},"globalVar")),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,t.yg)("data-lsp",{parentName:"span",lsp:"module globalThis"},"globalThis"),".",(0,t.yg)("data-lsp",{parentName:"span",lsp:"var globalVar: number"},"globalVar")," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")))))),(0,t.yg)("h3",{id:"no-undef-init"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-undef-init"},(0,t.yg)("inlineCode",{parentName:"a"},"no-undef-init"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: off")),(0,t.yg)("p",null,"We ",(0,t.yg)("em",{parentName:"p"},"require")," variables to be initialized (through ",(0,t.yg)("inlineCode",{parentName:"p"},"init-declarations"),"). In case there's no reasonable default value, you should use explicit ",(0,t.yg)("inlineCode",{parentName:"p"},"undefined"),"."),(0,t.yg)("h3",{id:"no-unused-vars"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unused-vars"},(0,t.yg)("inlineCode",{parentName:"a"},"no-unused-vars"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Configuration:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Check unused trailing function parameters (",(0,t.yg)("inlineCode",{parentName:"li"},'args: "after-used"'),")"),(0,t.yg)("li",{parentName:"ul"},"Check unused caught errors (",(0,t.yg)("inlineCode",{parentName:"li"},'caughtErrors: "all"'),")"),(0,t.yg)("li",{parentName:"ul"},"Ignore unused variables with rest element (",(0,t.yg)("inlineCode",{parentName:"li"},"ignoreRestSiblings: true"),")"),(0,t.yg)("li",{parentName:"ul"},"Check unused variables in the top-level scope (",(0,t.yg)("inlineCode",{parentName:"li"},'vars: "all"'),")"))),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("a",{parentName:"li",href:"/js-style-guide/typescript/base#no-unused-vars"},(0,t.yg)("inlineCode",{parentName:"a"},"@typescript-eslint/no-unused-vars")))))),(0,t.yg)("p",null,"Unused variables are a sign of refactoring artifact and should be removed as early as possible. However, there are the following exceptions:"),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"tsx"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Satisfying a type signature")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"plugin"),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#953800"}},"Plugin"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,t.yg)("span",{parentName:"div",style:{color:"#953800"}},"ast"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,t.yg)("span",{parentName:"div",style:{color:"#953800"}},"options"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Only use options, but ast has to be declared")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"};")),(0,t.yg)("div",{parentName:"code",className:"line"}),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Removing properties from objects")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"Component"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#953800"}},"props"),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#953800"}},"Props"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," { "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"someProp"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"..."),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"rest"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," } "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," props;")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," <"),(0,t.yg)("span",{parentName:"div",style:{color:"#116329"}},"div"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {"),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"..."),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"rest} />;")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"tsx"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Satisfying a type signature")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"plugin"),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"Plugin"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,t.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"ast"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,t.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"options"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Only use options, but ast has to be declared")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")),(0,t.yg)("div",{parentName:"code",className:"line"}),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Removing properties from objects")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"Component"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"props"),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"Props"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"someProp"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"..."),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"rest"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," } "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," props;")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," <"),(0,t.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"div"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {"),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"..."),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"rest} />;")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,t.yg)("p",null,"If you have an unused error variable, omit the catch binding."),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"try"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"catch"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"error"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"Failed"'),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"try"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"catch"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"error"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"Failed"'),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,t.yg)("h3",{id:"no-use-before-define"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-use-before-define"},(0,t.yg)("inlineCode",{parentName:"a"},"no-use-before-define"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: warning"),(0,t.yg)("li",{parentName:"ul"},"Configuration:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Allow export declarations before declarations (",(0,t.yg)("inlineCode",{parentName:"li"},"allowNamedExports: false"),")"),(0,t.yg)("li",{parentName:"ul"},"Check class declarations (",(0,t.yg)("inlineCode",{parentName:"li"},"classes: true"),")"),(0,t.yg)("li",{parentName:"ul"},"Allow function declarations to be hoisted (",(0,t.yg)("inlineCode",{parentName:"li"},"functions: true"),")"),(0,t.yg)("li",{parentName:"ul"},"Check variable declarations (",(0,t.yg)("inlineCode",{parentName:"li"},"variables: true"),")")))),(0,t.yg)("p",null,"You should generally avoid using variables before they are declared, as doing so leads to an error. For functions, you are free to let them get hoisted. In fact, we recommend the following style:"),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomething"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doA"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doB"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doC"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,t.yg)("div",{parentName:"code",className:"line"}),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doA"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {}")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doB"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {}")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doC"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {}")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomething"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doA"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doB"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doC"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,t.yg)("div",{parentName:"code",className:"line"}),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doA"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {}")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doB"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {}")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doC"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {}")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,t.yg)("p",null,"This rule has known false negatives:"),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(x);")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,t.yg)("div",{parentName:"code",className:"line"}),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(); "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Should not work")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"x"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},";"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(x);")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,t.yg)("div",{parentName:"code",className:"line"}),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(); "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Should not work")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"x"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")))))),(0,t.yg)("h3",{id:"no-useless-rename"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-rename"},(0,t.yg)("inlineCode",{parentName:"a"},"no-useless-rename"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Don't rename a variable to the same name in import, export, and destructuring."),(0,t.yg)("h3",{id:"one-var"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/one-var"},(0,t.yg)("inlineCode",{parentName:"a"},"one-var"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: off")),(0,t.yg)("p",null,"Generally, you should put each variable declaration on its own line. However, when it makes sense (for example, multiple variables used for very similar purposes: ",(0,t.yg)("inlineCode",{parentName:"p"},"let start = 0, end = 0;"),"), you are free to declare multiple variables consecutively."),(0,t.yg)("h3",{id:"prefer-const"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-const"},(0,t.yg)("inlineCode",{parentName:"a"},"prefer-const"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Configuration:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Require ",(0,t.yg)("inlineCode",{parentName:"li"},"const")," as long as any of the destructured variables should be ",(0,t.yg)("inlineCode",{parentName:"li"},"const")," (",(0,t.yg)("inlineCode",{parentName:"li"},'destructuring: "any"'),")"),(0,t.yg)("li",{parentName:"ul"},"Do not ignore variables that are only assigned once and read before assignment (",(0,t.yg)("inlineCode",{parentName:"li"},"ignoreReadBeforeAssign: false"),")")))),(0,t.yg)("p",null,"Only use ",(0,t.yg)("inlineCode",{parentName:"p"},"let")," when the variable is actually reassigned. Otherwise, use ",(0,t.yg)("inlineCode",{parentName:"p"},"const"),", which makes TypeScript infer narrower types, and makes the type of each variable easier to trace."),(0,t.yg)("p",null,"In destructuring, we require using ",(0,t.yg)("inlineCode",{parentName:"p"},"const")," when any of the variables should be ",(0,t.yg)("inlineCode",{parentName:"p"},"const"),". Otherwise, this may lead to spillover writability. If you want to make some of the variables ",(0,t.yg)("inlineCode",{parentName:"p"},"let"),", you should destructure them separately."),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"result"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomething"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," { "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"a"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"b"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," } "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," result;")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," { c, d } "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," result;"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"result"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomething"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"a"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"b"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," } "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," result;")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { c, d } "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," result;")))))),(0,t.yg)("h3",{id:"prefer-destructuring"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-destructuring"},(0,t.yg)("inlineCode",{parentName:"a"},"prefer-destructuring"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Configuration:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Require destructuring for arrays (",(0,t.yg)("inlineCode",{parentName:"li"},"array: true"),")"),(0,t.yg)("li",{parentName:"ul"},"Require destructuring for objects (",(0,t.yg)("inlineCode",{parentName:"li"},"object: true"),")"),(0,t.yg)("li",{parentName:"ul"},"Do not require destructuring when the variable is renamed (",(0,t.yg)("inlineCode",{parentName:"li"},"enforceForRenamedProperties: false"),")")))),(0,t.yg)("p",null,"Destructuring is generally preferred over accessing properties directly. It makes the code more concise and easier to read. There are some catches:"),(0,t.yg)("ol",null,(0,t.yg)("li",{parentName:"ol"},"When you are accessing a high array index (for example, ",(0,t.yg)("inlineCode",{parentName:"li"},"const char = str[5]"),"), you may not want to use destructuring like ",(0,t.yg)("inlineCode",{parentName:"li"},"const [, , , , , char] = str"),". Disable the rule in this case."),(0,t.yg)("li",{parentName:"ol"},"In performance-critical cases, array destructuring is slower than property access. ",(0,t.yg)("inlineCode",{parentName:"li"},"const { 0: x } = a")," may be faster than ",(0,t.yg)("inlineCode",{parentName:"li"},"const [x] = a"),". This does not matter in general."),(0,t.yg)("li",{parentName:"ol"},"Not all index accesses can be safely refactored to array destructuring, unless the object is also iterable. You should use your own discretion when fixing the error.")),(0,t.yg)("h3",{id:"vars-on-top"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/vars-on-top"},(0,t.yg)("inlineCode",{parentName:"a"},"vars-on-top"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"We don't usually allow ",(0,t.yg)("inlineCode",{parentName:"p"},"var"),"s. When you do use them, put them at the top level of functions/scripts to minimize its quirks."),(0,t.yg)("h2",{id:"naming-conventions"},"Naming conventions"),(0,t.yg)("h3",{id:"camelcase"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/camelcase"},(0,t.yg)("inlineCode",{parentName:"a"},"camelcase"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Configuration:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Require destructured variables to be camelCase (",(0,t.yg)("inlineCode",{parentName:"li"},"ignoreDestructuring: false"),")"),(0,t.yg)("li",{parentName:"ul"},"Require global variables to be camelCase (",(0,t.yg)("inlineCode",{parentName:"li"},"ignoreGlobals: false"),")"),(0,t.yg)("li",{parentName:"ul"},"Require imported variables to be camelCase (",(0,t.yg)("inlineCode",{parentName:"li"},"ignoreImports: false"),")"),(0,t.yg)("li",{parentName:"ul"},"Ignore property names in object literals (",(0,t.yg)("inlineCode",{parentName:"li"},'properties: "never"'),")")))),(0,t.yg)("p",null,"Until we fully use ",(0,t.yg)("inlineCode",{parentName:"p"},"@typescript-eslint/naming-convention"),", we will still use this rule to enforce camelCase where possible. We don't check object properties because the object may be passed to a third-party library:"),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"checkESLint"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"({")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," config: {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," camel_case: "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"true"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"});"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"checkESLint"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"({")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," config: {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," camel_case: "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"true"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"});")))))),(0,t.yg)("h3",{id:"id-denylist"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/id-denylist"},(0,t.yg)("inlineCode",{parentName:"a"},"id-denylist"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: off")),(0,t.yg)("p",null,"You may want to configure this yourself if you want to ban certain identifiers."),(0,t.yg)("h3",{id:"id-length"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/id-length"},(0,t.yg)("inlineCode",{parentName:"a"},"id-length"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: off")),(0,t.yg)("p",null,"We don't think length is a good metric for name quality."),(0,t.yg)("h3",{id:"id-match"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/id-match"},(0,t.yg)("inlineCode",{parentName:"a"},"id-match"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: off")),(0,t.yg)("p",null,"This rule is fully covered by ",(0,t.yg)("inlineCode",{parentName:"p"},"@typescript-eslint/naming-convention"),"."),(0,t.yg)("h3",{id:"no-shadow-restricted-names"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-shadow-restricted-names"},(0,t.yg)("inlineCode",{parentName:"a"},"no-shadow-restricted-names"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Don't declare a binding called ",(0,t.yg)("inlineCode",{parentName:"p"},"undefined"),", ",(0,t.yg)("inlineCode",{parentName:"p"},"NaN"),", ",(0,t.yg)("inlineCode",{parentName:"p"},"Infinity"),", ",(0,t.yg)("inlineCode",{parentName:"p"},"eval"),", or ",(0,t.yg)("inlineCode",{parentName:"p"},"arguments"),". You know exactly what values they represent."),(0,t.yg)("h3",{id:"no-underscore-dangle"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-underscore-dangle"},(0,t.yg)("inlineCode",{parentName:"a"},"no-underscore-dangle"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: off")),(0,t.yg)("p",null,"You should generally avoid underscored names and prefer proper encapsulation instead (such as through closures and private names). Do ",(0,t.yg)("em",{parentName:"p"},"not")," use underscores to represent throwaway names; just leave it unused (such cases include object destructuring to throw the property away, or function parameters). However, there are cases where you have to use underscores, such as when the name is expected by an external API."),(0,t.yg)("h2",{id:"globals"},"Globals"),(0,t.yg)("h3",{id:"no-alert"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-alert"},(0,t.yg)("inlineCode",{parentName:"a"},"no-alert"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"There is no good reason to use ",(0,t.yg)("inlineCode",{parentName:"p"},"alert"),"/",(0,t.yg)("inlineCode",{parentName:"p"},"confirm"),"/",(0,t.yg)("inlineCode",{parentName:"p"},"prompt")," in production. They are blocking and look too much like system dialogs."),(0,t.yg)("h3",{id:"no-console"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-console"},(0,t.yg)("inlineCode",{parentName:"a"},"no-console"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: can be enabled")),(0,t.yg)("p",null,(0,t.yg)("inlineCode",{parentName:"p"},"console.log")," is commonly left as debugging artifacts and can occasionally disrupt the console log formatting. For example, Webpack has the unified ",(0,t.yg)("a",{parentName:"p",href:"https://webpack.js.org/api/logging/"},"logger interface")," for emitting messages. Projects are encouraged to encapsulate their own logger instance as well for unified message formatting and semantics."),(0,t.yg)("p",null,"However, in more casual projects without a wrapped logger, using ",(0,t.yg)("inlineCode",{parentName:"p"},"console.log")," may be intentional. This rule can be overridden in user-land."),(0,t.yg)("h3",{id:"no-eval"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-eval"},(0,t.yg)("inlineCode",{parentName:"a"},"no-eval"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Configuration:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Do not allow indirect ",(0,t.yg)("inlineCode",{parentName:"li"},"eval")," (",(0,t.yg)("inlineCode",{parentName:"li"},"allowIndirect: false"),")")))),(0,t.yg)("p",null,"There is not much reason you should use ",(0,t.yg)("inlineCode",{parentName:"p"},"eval"),"\u2014many safe alternatives exist. Indirect ",(0,t.yg)("inlineCode",{parentName:"p"},"eval")," in strict mode tends to be safe but is still frowned upon. In case you really need to dynamically evaluate code, use ",(0,t.yg)("inlineCode",{parentName:"p"},"new Function")," instead, which also allows injecting variables via parameters."),(0,t.yg)("h3",{id:"no-global-assign"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-global-assign"},(0,t.yg)("inlineCode",{parentName:"a"},"no-global-assign"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: off")),(0,t.yg)("p",null,"We have to turn this rule off, because we cannot make ESLint aware of every global, so the reports are too inconsistent and unhelpful. However, you should know from your heart to only reassign variables in your scope. If you want to modify globals, use ",(0,t.yg)("inlineCode",{parentName:"p"},"globalThis.x")," instead to make your intention explicit."),(0,t.yg)("h3",{id:"no-implied-eval"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-implied-eval"},(0,t.yg)("inlineCode",{parentName:"a"},"no-implied-eval"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"There is no good reason to use ",(0,t.yg)("inlineCode",{parentName:"p"},"setTimeout"),"/",(0,t.yg)("inlineCode",{parentName:"p"},"setInterval")," with a string argument. Use a function instead."),(0,t.yg)("h3",{id:"no-iterator"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-iterator"},(0,t.yg)("inlineCode",{parentName:"a"},"no-iterator"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Don't use the ",(0,t.yg)("inlineCode",{parentName:"p"},"__iterator__")," property. No one implements it."),(0,t.yg)("h3",{id:"no-new-func"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-new-func"},(0,t.yg)("inlineCode",{parentName:"a"},"no-new-func"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"You should generally avoid using the ",(0,t.yg)("inlineCode",{parentName:"p"},"Function")," constructor, because it is just another form of dynamic evaluation. However, compared to ",(0,t.yg)("inlineCode",{parentName:"p"},"eval"),", it is easier to be used safely, and in case when you need to dynamically evaluate code, you should prefer to use this instead of ",(0,t.yg)("inlineCode",{parentName:"p"},"eval"),"."),(0,t.yg)("h3",{id:"no-new-native-nonconstructor"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-new-native-nonconstructor"},(0,t.yg)("inlineCode",{parentName:"a"},"no-new-native-nonconstructor"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"ts(7009): 'new' expression, whose target lacks a construct signature, implicitly has an 'any' type."))))),(0,t.yg)("p",null,"Don't construct ",(0,t.yg)("inlineCode",{parentName:"p"},"Symbol")," and ",(0,t.yg)("inlineCode",{parentName:"p"},"BigInt")," because they are not meant for construction."),(0,t.yg)("h3",{id:"no-new-wrappers"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-new-wrappers"},(0,t.yg)("inlineCode",{parentName:"a"},"no-new-wrappers"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Don't construct ",(0,t.yg)("inlineCode",{parentName:"p"},"String"),", ",(0,t.yg)("inlineCode",{parentName:"p"},"Number"),", and ",(0,t.yg)("inlineCode",{parentName:"p"},"Boolean")," objects because they are much harder to use and do not have any benefits over primitives."),(0,t.yg)("h3",{id:"no-obj-calls"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-obj-calls"},(0,t.yg)("inlineCode",{parentName:"a"},"no-obj-calls"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"ts(2349): This expression is not callable. Type 'Math' has no call signatures."))))),(0,t.yg)("p",null,"Don't call ",(0,t.yg)("inlineCode",{parentName:"p"},"Math"),", ",(0,t.yg)("inlineCode",{parentName:"p"},"JSON"),", and other namespaces."),(0,t.yg)("h3",{id:"no-object-constructor"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-object-constructor"},(0,t.yg)("inlineCode",{parentName:"a"},"no-object-constructor"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Don't use ",(0,t.yg)("inlineCode",{parentName:"p"},"new Object()")," because it's just a longer way of writing ",(0,t.yg)("inlineCode",{parentName:"p"},"{}"),". Always use ",(0,t.yg)("inlineCode",{parentName:"p"},"Object")," with an argument."),(0,t.yg)("h3",{id:"no-proto"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-proto"},(0,t.yg)("inlineCode",{parentName:"a"},"no-proto"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Don't access the ",(0,t.yg)("inlineCode",{parentName:"p"},"__proto__")," property. Use ",(0,t.yg)("inlineCode",{parentName:"p"},"Object.getPrototypeOf")," and ",(0,t.yg)("inlineCode",{parentName:"p"},"Object.setPrototypeOf")," instead. Note that the ",(0,t.yg)("inlineCode",{parentName:"p"},"__proto__")," syntax in object literals is still allowed and should be preferred over ",(0,t.yg)("inlineCode",{parentName:"p"},"Object.create"),"."),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Write this:")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"obj"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," __proto__: "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"};")),(0,t.yg)("div",{parentName:"code",className:"line"}),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Instead of this:")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"obj"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Object"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"create"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},");"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Write this:")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"obj"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," __proto__: "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")),(0,t.yg)("div",{parentName:"code",className:"line"}),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Instead of this:")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"obj"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Object"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"create"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")))))),(0,t.yg)("admonition",{type:"note"},(0,t.yg)("p",{parentName:"admonition"},"TypeScript does not support the ",(0,t.yg)("inlineCode",{parentName:"p"},"__proto__")," syntax in object literals yet. However, ",(0,t.yg)("inlineCode",{parentName:"p"},"Object.create")," will be always typed as ",(0,t.yg)("inlineCode",{parentName:"p"},"any"),", so the former should still be preferred. Cast with ",(0,t.yg)("inlineCode",{parentName:"p"},"null as never")," when necessary.")),(0,t.yg)("h3",{id:"no-prototype-builtins"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-prototype-builtins"},(0,t.yg)("inlineCode",{parentName:"a"},"no-prototype-builtins"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Don't use ",(0,t.yg)("inlineCode",{parentName:"p"},"Object.prototype")," methods because they are not safe against ",(0,t.yg)("inlineCode",{parentName:"p"},"null")," and ",(0,t.yg)("inlineCode",{parentName:"p"},"undefined"),". Generally, you don't need to jump hoops to get similar behavior."),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Instead of:")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"foo."),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"hasOwnProperty"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"bar"'),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"foo."),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"propertyIsEnumerable"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"bar"'),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"foo."),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"isPrototypeOf"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(bar);")),(0,t.yg)("div",{parentName:"code",className:"line"}),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Write:")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Object"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"hasOwn"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(foo, "),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"bar"'),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Object"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"getOwnPropertyDescriptor"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(foo, "),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"bar"'),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},")?.enumerable;")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Object"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"prototype"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},".isPrototypeOf."),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"call"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(foo, bar); "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Do you really need this?"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Instead of:")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"foo."),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"hasOwnProperty"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"bar"'),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"foo."),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"propertyIsEnumerable"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"bar"'),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"foo."),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"isPrototypeOf"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(bar);")),(0,t.yg)("div",{parentName:"code",className:"line"}),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Write:")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Object"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"hasOwn"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(foo, "),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"bar"'),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Object"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"getOwnPropertyDescriptor"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(foo, "),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"bar"'),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},")?.enumerable;")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Object"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"prototype"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".isPrototypeOf."),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"call"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(foo, bar); "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Do you really need this?")))))),(0,t.yg)("h3",{id:"no-restricted-properties"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-restricted-properties"},(0,t.yg)("inlineCode",{parentName:"a"},"no-restricted-properties"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: off")),(0,t.yg)("p",null,"You may want to configure this yourself if you want to ban certain identifiers or certain properties."),(0,t.yg)("h3",{id:"no-undef"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-undef"},(0,t.yg)("inlineCode",{parentName:"a"},"no-undef"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Configuration:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Disallow using ",(0,t.yg)("inlineCode",{parentName:"li"},"typeof")," on undefined variables (",(0,t.yg)("inlineCode",{parentName:"li"},"typeof: true"),")"))),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"ts(2304): Cannot find name 'a'."))))),(0,t.yg)("p",null,"Don't use undefined variables. If you want to check if a variable is defined, use ",(0,t.yg)("inlineCode",{parentName:"p"},'if ("x" in globalThis)')," or ",(0,t.yg)("inlineCode",{parentName:"p"},'if (typeof globalThis.x !== "undefined")'),"."),(0,t.yg)("p",null,"Note that this rule is only useful in a plain-JS project. In a TypeScript project, you should use TypeScript checks instead. You may find cases where ESLint is unaware of a global variable. In this case, either change your ",(0,t.yg)("inlineCode",{parentName:"p"},"env")," setting, or use ",(0,t.yg)("inlineCode",{parentName:"p"},"globalThis.x"),"."),(0,t.yg)("h3",{id:"no-undefined"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-undefined"},(0,t.yg)("inlineCode",{parentName:"a"},"no-undefined"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: off")),(0,t.yg)("p",null,"There's virtually no risk to use ",(0,t.yg)("inlineCode",{parentName:"p"},"undefined")," nowadays, especially with rules like ",(0,t.yg)("inlineCode",{parentName:"p"},"no-shadow-restricted-names"),". Furthermore, because ",(0,t.yg)("inlineCode",{parentName:"p"},"undefined"),' is so pervasive as the implicit "value of absence", it\'s hard to avoid it. You should generally use ',(0,t.yg)("inlineCode",{parentName:"p"},"undefined")," instead of ",(0,t.yg)("inlineCode",{parentName:"p"},"null")," as the default value, unless the latter has a semantic difference from ",(0,t.yg)("inlineCode",{parentName:"p"},"undefined"),"."),(0,t.yg)("h3",{id:"prefer-object-has-own"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-object-has-own"},(0,t.yg)("inlineCode",{parentName:"a"},"prefer-object-has-own"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Use ",(0,t.yg)("inlineCode",{parentName:"p"},"Object.hasOwn")," instead of ",(0,t.yg)("inlineCode",{parentName:"p"},"Object.prototype.hasOwnProperty.call"),". It's shorter and more readable. If you need compatibility, install a polyfill. (You should never use ",(0,t.yg)("inlineCode",{parentName:"p"},"x.hasOwnProperty"),", by the way; see ",(0,t.yg)("a",{parentName:"p",href:"#no-prototype-builtins"},(0,t.yg)("inlineCode",{parentName:"a"},"no-prototype-builtins")),".)"))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3c9c65c3.ef214b93.js b/assets/js/3c9c65c3.ef214b93.js deleted file mode 100644 index 1320991..0000000 --- a/assets/js/3c9c65c3.ef214b93.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[877],{9829:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>i,contentTitle:()=>o,default:()=>m,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var n=t(2685),l=(t(7378),t(5318));const r={sidebar_position:3},o="Variables & names",s={unversionedId:"eslint-base/variables-names",id:"eslint-base/variables-names",title:"Variables & names",description:"This page discusses rules around variable declaration, use of properties, and naming.",source:"@site/../docs/eslint-base/variables-names.md",sourceDirName:"eslint-base",slug:"/eslint-base/variables-names",permalink:"/js-style-guide/eslint-base/variables-names",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"defaultSidebar",previous:{title:"Literals",permalink:"/js-style-guide/eslint-base/literals"},next:{title:"Operators",permalink:"/js-style-guide/eslint-base/operators"}},i={},p=[{value:"Variable declarations",id:"variable-declarations",level:2},{value:"block-scoped-var",id:"block-scoped-var",level:3},{value:"init-declarations",id:"init-declarations",level:3},{value:"no-const-assign",id:"no-const-assign",level:3},{value:"no-implicit-globals",id:"no-implicit-globals",level:3},{value:"no-redeclare",id:"no-redeclare",level:3},{value:"no-shadow",id:"no-shadow",level:3},{value:"no-var",id:"no-var",level:3},{value:"no-undef-init",id:"no-undef-init",level:3},{value:"no-unused-vars",id:"no-unused-vars",level:3},{value:"no-use-before-define",id:"no-use-before-define",level:3},{value:"no-useless-rename",id:"no-useless-rename",level:3},{value:"one-var",id:"one-var",level:3},{value:"prefer-const",id:"prefer-const",level:3},{value:"prefer-destructuring",id:"prefer-destructuring",level:3},{value:"vars-on-top",id:"vars-on-top",level:3},{value:"Naming conventions",id:"naming-conventions",level:2},{value:"camelcase",id:"camelcase",level:3},{value:"id-denylist",id:"id-denylist",level:3},{value:"id-length",id:"id-length",level:3},{value:"id-match",id:"id-match",level:3},{value:"no-shadow-restricted-names",id:"no-shadow-restricted-names",level:3},{value:"no-underscore-dangle",id:"no-underscore-dangle",level:3},{value:"Globals",id:"globals",level:2},{value:"no-alert",id:"no-alert",level:3},{value:"no-console",id:"no-console",level:3},{value:"no-eval",id:"no-eval",level:3},{value:"no-global-assign",id:"no-global-assign",level:3},{value:"no-implied-eval",id:"no-implied-eval",level:3},{value:"no-iterator",id:"no-iterator",level:3},{value:"no-new-func",id:"no-new-func",level:3},{value:"no-new-native-nonconstructor",id:"no-new-native-nonconstructor",level:3},{value:"no-new-wrappers",id:"no-new-wrappers",level:3},{value:"no-obj-calls",id:"no-obj-calls",level:3},{value:"no-object-constructor",id:"no-object-constructor",level:3},{value:"no-proto",id:"no-proto",level:3},{value:"no-prototype-builtins",id:"no-prototype-builtins",level:3},{value:"no-restricted-properties",id:"no-restricted-properties",level:3},{value:"no-undef",id:"no-undef",level:3},{value:"no-undefined",id:"no-undefined",level:3},{value:"prefer-object-has-own",id:"prefer-object-has-own",level:3}],d={toc:p},c="wrapper";function m(e){let{components:a,...t}=e;return(0,l.kt)(c,(0,n.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"variables--names"},"Variables & names"),(0,l.kt)("p",null,"This page discusses rules around variable declaration, use of properties, and naming."),(0,l.kt)("h2",{id:"variable-declarations"},"Variable declarations"),(0,l.kt)("h3",{id:"block-scoped-var"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/block-scoped-var"},(0,l.kt)("inlineCode",{parentName:"a"},"block-scoped-var"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Because ",(0,l.kt)("inlineCode",{parentName:"p"},"var"),"s are forbidden altogether, this rule is mostly moot. In the rare case where you need to use ",(0,l.kt)("inlineCode",{parentName:"p"},"var")," (such as to declare globals), such vars should not be deceptively inside a block."),(0,l.kt)("h3",{id:"init-declarations"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/init-declarations"},(0,l.kt)("inlineCode",{parentName:"a"},"init-declarations"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Disabled by the ",(0,l.kt)("a",{parentName:"li",href:"/js-style-guide/typescript/base"},"typescript")," config"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Require variables to be initialized (",(0,l.kt)("inlineCode",{parentName:"li"},'"always"'),")"))),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/js-style-guide/typescript/base#init-declarations"},(0,l.kt)("inlineCode",{parentName:"a"},"@typescript-eslint/init-declarations"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ts(2454): Variable 'a' is used before being assigned."))))),(0,l.kt)("p",null,"We require variables to be initialized. Otherwise, it's possible to circumvent TypeScript:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,l.kt)("data-lsp",{parentName:"span",lsp:"let a: number"},"a")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"function useA(): void"},"useA")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,l.kt)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,l.kt)("data-lsp",{parentName:"span",lsp:"let a: number"},"a"),"); "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> undefined")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"function useA(): void"},"useA")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"let a: number"},"a")," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,l.kt)("data-lsp",{parentName:"span",lsp:"let a: number"},"a")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"function useA(): void"},"useA")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,l.kt)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,l.kt)("data-lsp",{parentName:"span",lsp:"let a: number"},"a"),"); "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> undefined")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"function useA(): void"},"useA")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"let a: number"},"a")," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")))))),(0,l.kt)("p",null,"You should almost always initialize variables upfront (and use ",(0,l.kt)("inlineCode",{parentName:"p"},"const")," where possible). Use ternaries instead of ",(0,l.kt)("inlineCode",{parentName:"p"},"if...else"),". If you need to lazy initialize a variable, initialize it to ",(0,l.kt)("inlineCode",{parentName:"p"},"undefined"),", so that you remember to explicitly check for ",(0,l.kt)("inlineCode",{parentName:"p"},"undefined")," before using it."),(0,l.kt)("h3",{id:"no-const-assign"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-const-assign"},(0,l.kt)("inlineCode",{parentName:"a"},"no-const-assign"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ts(2588): Cannot assign to 'a' because it is a constant."))))),(0,l.kt)("p",null,"Re-assigning const variables causes a runtime error."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"const a: 1"},"a")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},(0,l.kt)("data-err",{parentName:"span"},(0,l.kt)("data-lsp",{parentName:"data-err",lsp:"const a: any"},"a"))," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> TypeError: Assignment to constant variable.")),(0,l.kt)("span",{parentName:"code",className:"error"},(0,l.kt)("span",{parentName:"span"},"Cannot assign to 'a' because it is a constant."),(0,l.kt)("span",{parentName:"span",className:"code"},"2588")),(0,l.kt)("span",{parentName:"code",className:"error-behind"},"Cannot assign to 'a' because it is a constant.")))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"const a: 1"},"a")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,l.kt)("data-err",{parentName:"span"},(0,l.kt)("data-lsp",{parentName:"data-err",lsp:"const a: any"},"a"))," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> TypeError: Assignment to constant variable.")),(0,l.kt)("span",{parentName:"code",className:"error"},(0,l.kt)("span",{parentName:"span"},"Cannot assign to 'a' because it is a constant."),(0,l.kt)("span",{parentName:"span",className:"code"},"2588")),(0,l.kt)("span",{parentName:"code",className:"error-behind"},"Cannot assign to 'a' because it is a constant."))))),(0,l.kt)("h3",{id:"no-implicit-globals"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-implicit-globals"},(0,l.kt)("inlineCode",{parentName:"a"},"no-implicit-globals"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Disallow global lexical declarations too (",(0,l.kt)("inlineCode",{parentName:"li"},"lexicalBindings: true"),")")))),(0,l.kt)("p",null,"We have forbidden using ",(0,l.kt)("inlineCode",{parentName:"p"},"var"),". ",(0,l.kt)("inlineCode",{parentName:"p"},"let")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"const")," at the top level also behave weirdly due to TDZ. You should probably be modularizing your code anyway."),(0,l.kt)("h3",{id:"no-redeclare"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-redeclare"},(0,l.kt)("inlineCode",{parentName:"a"},"no-redeclare"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Check redeclaration of globals (",(0,l.kt)("inlineCode",{parentName:"li"},"builtinGlobals: false"),")"))),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/js-style-guide/typescript/base#no-redeclare"},(0,l.kt)("inlineCode",{parentName:"a"},"@typescript-eslint/no-redeclare")))))),(0,l.kt)("p",null,"Do not redeclare ",(0,l.kt)("inlineCode",{parentName:"p"},"var"),"/",(0,l.kt)("inlineCode",{parentName:"p"},"function"),". This is probably a mistake. Note that ",(0,l.kt)("inlineCode",{parentName:"p"},"let"),"/",(0,l.kt)("inlineCode",{parentName:"p"},"const")," cannot be redeclared and doing so is a syntax error in the first place."),(0,l.kt)("h3",{id:"no-shadow"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-shadow"},(0,l.kt)("inlineCode",{parentName:"a"},"no-shadow"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: warning"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Ignore shadowing of globals (",(0,l.kt)("inlineCode",{parentName:"li"},"builtinGlobals: true"),")"),(0,l.kt)("li",{parentName:"ul"},"Check shadowing of all variables declared in the outer scope (",(0,l.kt)("inlineCode",{parentName:"li"},'hoist: "all"'),")"),(0,l.kt)("li",{parentName:"ul"},"Allow shadowing of uninitialized variables (",(0,l.kt)("inlineCode",{parentName:"li"},"ignoreOnInitialization: true"),")")))),(0,l.kt)("p",null,"We avoid shadowing because doing so is a refactoring hazard."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"x"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomething"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"x"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(x); "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// What is this x meant to be?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// If I change the parameter name, should I change this too?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," });")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"x"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomething"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"x"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(x); "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// What is this x meant to be?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// If I change the parameter name, should I change this too?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," });")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("p",null,"The issue isn't better because the variable is only declared afterwards."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomething"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"x"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(x); "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// What is this x meant to be?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// If I change the parameter name, should I change this too?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," });")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// If I move this declaration before doSomething(), there")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// shouldn't be a difference")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"x"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomething"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"x"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(x); "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// What is this x meant to be?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// If I change the parameter name, should I change this too?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," });")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// If I move this declaration before doSomething(), there")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// shouldn't be a difference")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"x"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("p",null,"However, shadowing is allowed when the variable is initialized later. The following pattern is encouraged:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"x"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (() "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," x "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," x;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"})();"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"x"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (() "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," x "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," x;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"})();")))))),(0,l.kt)("p",null,"We allow shadowing globals\u2014this is for a pragmatic concern. There are some extremely generically named globals like ",(0,l.kt)("inlineCode",{parentName:"p"},"name")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"Plugin")," which we don't want to prevented from being used as local variables. However, you should probably avoid using names like ",(0,l.kt)("inlineCode",{parentName:"p"},"fetch"),"."),(0,l.kt)("h3",{id:"no-var"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-var"},(0,l.kt)("inlineCode",{parentName:"a"},"no-var"))),(0,l.kt)("p",null,"We disallow ",(0,l.kt)("inlineCode",{parentName:"p"},"var")," statements. ",(0,l.kt)("inlineCode",{parentName:"p"},"var")," is fully predated by ",(0,l.kt)("inlineCode",{parentName:"p"},"let"),"/",(0,l.kt)("inlineCode",{parentName:"p"},"const")," and its hoisting behavior makes code harder to debug. There's not a single reason to use ",(0,l.kt)("inlineCode",{parentName:"p"},"var")," today. If you need to share one variable between two blocks, declare it in the upper scope. If you need to declare a global variable (which you probably shouldn't anyway), directly modify ",(0,l.kt)("inlineCode",{parentName:"p"},"globalThis")," (which also works in modules)."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"declare"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"var"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,l.kt)("data-lsp",{parentName:"span",lsp:"var globalVar: number"},"globalVar")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"module globalThis"},"globalThis"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:"var globalVar: number"},"globalVar")," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"declare"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"var"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,l.kt)("data-lsp",{parentName:"span",lsp:"var globalVar: number"},"globalVar")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"module globalThis"},"globalThis"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:"var globalVar: number"},"globalVar")," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")))))),(0,l.kt)("h3",{id:"no-undef-init"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-undef-init"},(0,l.kt)("inlineCode",{parentName:"a"},"no-undef-init"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"We ",(0,l.kt)("em",{parentName:"p"},"require")," variables to be initialized (through ",(0,l.kt)("inlineCode",{parentName:"p"},"init-declarations"),"). In case there's no reasonable default value, you should use explicit ",(0,l.kt)("inlineCode",{parentName:"p"},"undefined"),"."),(0,l.kt)("h3",{id:"no-unused-vars"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unused-vars"},(0,l.kt)("inlineCode",{parentName:"a"},"no-unused-vars"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Check unused trailing function parameters (",(0,l.kt)("inlineCode",{parentName:"li"},'args: "after-used"'),")"),(0,l.kt)("li",{parentName:"ul"},"Check unused caught errors (",(0,l.kt)("inlineCode",{parentName:"li"},'caughtErrors: "all"'),")"),(0,l.kt)("li",{parentName:"ul"},"Ignore unused variables with rest element (",(0,l.kt)("inlineCode",{parentName:"li"},"ignoreRestSiblings: true"),")"),(0,l.kt)("li",{parentName:"ul"},"Check unused variables in the top-level scope (",(0,l.kt)("inlineCode",{parentName:"li"},'vars: "all"'),")"))),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/js-style-guide/typescript/base#no-unused-vars"},(0,l.kt)("inlineCode",{parentName:"a"},"@typescript-eslint/no-unused-vars")))))),(0,l.kt)("p",null,"Unused variables are a sign of refactoring artifact and should be removed as early as possible. However, there are the following exceptions:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"tsx"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Satisfying a type signature")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"plugin"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"Plugin"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"ast"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"options"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Only use options, but ast has to be declared")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"};")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Removing properties from objects")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"Component"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"props"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"Props"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," { "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"someProp"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"..."),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"rest"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," } "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," props;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," <"),(0,l.kt)("span",{parentName:"div",style:{color:"#116329"}},"div"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"..."),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"rest} />;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"tsx"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Satisfying a type signature")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"plugin"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"Plugin"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"ast"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"options"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Only use options, but ast has to be declared")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Removing properties from objects")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"Component"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"props"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"Props"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"someProp"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"..."),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"rest"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," } "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," props;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," <"),(0,l.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"div"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"..."),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"rest} />;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("p",null,"If you have an unused error variable, omit the catch binding."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"try"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"catch"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"error"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"Failed"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"try"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"catch"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"error"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"Failed"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("h3",{id:"no-use-before-define"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-use-before-define"},(0,l.kt)("inlineCode",{parentName:"a"},"no-use-before-define"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: warning"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Allow export declarations before declarations (",(0,l.kt)("inlineCode",{parentName:"li"},"allowNamedExports: false"),")"),(0,l.kt)("li",{parentName:"ul"},"Check class declarations (",(0,l.kt)("inlineCode",{parentName:"li"},"classes: true"),")"),(0,l.kt)("li",{parentName:"ul"},"Allow function declarations to be hoisted (",(0,l.kt)("inlineCode",{parentName:"li"},"functions: true"),")"),(0,l.kt)("li",{parentName:"ul"},"Check variable declarations (",(0,l.kt)("inlineCode",{parentName:"li"},"variables: true"),")")))),(0,l.kt)("p",null,"You should generally avoid using variables before they are declared, as doing so leads to an error. For functions, you are free to let them get hoisted. In fact, we recommend the following style:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomething"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doA"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doB"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doC"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doA"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {}")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doB"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {}")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doC"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {}")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomething"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doA"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doB"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doC"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doA"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {}")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doB"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {}")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doC"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {}")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("p",null,"This rule has known false negatives:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(x);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(); "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Should not work")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"x"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(x);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(); "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Should not work")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"x"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")))))),(0,l.kt)("h3",{id:"no-useless-rename"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-rename"},(0,l.kt)("inlineCode",{parentName:"a"},"no-useless-rename"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Don't rename a variable to the same name in import, export, and destructuring."),(0,l.kt)("h3",{id:"one-var"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/one-var"},(0,l.kt)("inlineCode",{parentName:"a"},"one-var"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"Generally, you should put each variable declaration on its own line. However, when it makes sense (for example, multiple variables used for very similar purposes: ",(0,l.kt)("inlineCode",{parentName:"p"},"let start = 0, end = 0;"),"), you are free to declare multiple variables consecutively."),(0,l.kt)("h3",{id:"prefer-const"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-const"},(0,l.kt)("inlineCode",{parentName:"a"},"prefer-const"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Require ",(0,l.kt)("inlineCode",{parentName:"li"},"const")," as long as any of the destructured variables should be ",(0,l.kt)("inlineCode",{parentName:"li"},"const")," (",(0,l.kt)("inlineCode",{parentName:"li"},'destructuring: "any"'),")"),(0,l.kt)("li",{parentName:"ul"},"Do not ignore variables that are only assigned once and read before assignment (",(0,l.kt)("inlineCode",{parentName:"li"},"ignoreReadBeforeAssign: false"),")")))),(0,l.kt)("p",null,"Only use ",(0,l.kt)("inlineCode",{parentName:"p"},"let")," when the variable is actually reassigned. Otherwise, use ",(0,l.kt)("inlineCode",{parentName:"p"},"const"),", which makes TypeScript infer narrower types, and makes the type of each variable easier to trace."),(0,l.kt)("p",null,"In destructuring, we require using ",(0,l.kt)("inlineCode",{parentName:"p"},"const")," when any of the variables should be ",(0,l.kt)("inlineCode",{parentName:"p"},"const"),". Otherwise, this may lead to spillover writability. If you want to make some of the variables ",(0,l.kt)("inlineCode",{parentName:"p"},"let"),", you should destructure them separately."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"result"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomething"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," { "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"a"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"b"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," } "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," result;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," { c, d } "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," result;"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"result"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomething"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"a"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"b"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," } "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," result;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { c, d } "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," result;")))))),(0,l.kt)("h3",{id:"prefer-destructuring"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-destructuring"},(0,l.kt)("inlineCode",{parentName:"a"},"prefer-destructuring"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Require destructuring for arrays (",(0,l.kt)("inlineCode",{parentName:"li"},"array: true"),")"),(0,l.kt)("li",{parentName:"ul"},"Require destructuring for objects (",(0,l.kt)("inlineCode",{parentName:"li"},"object: true"),")"),(0,l.kt)("li",{parentName:"ul"},"Do not require destructuring when the variable is renamed (",(0,l.kt)("inlineCode",{parentName:"li"},"enforceForRenamedProperties: false"),")")))),(0,l.kt)("p",null,"Destructuring is generally preferred over accessing properties directly. It makes the code more concise and easier to read. There are some catches:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"When you are accessing a high array index (for example, ",(0,l.kt)("inlineCode",{parentName:"li"},"const char = str[5]"),"), you may not want to use destructuring like ",(0,l.kt)("inlineCode",{parentName:"li"},"const [, , , , , char] = str"),". Disable the rule in this case."),(0,l.kt)("li",{parentName:"ol"},"In performance-critical cases, array destructuring is slower than property access. ",(0,l.kt)("inlineCode",{parentName:"li"},"const { 0: x } = a")," may be faster than ",(0,l.kt)("inlineCode",{parentName:"li"},"const [x] = a"),". This does not matter in general."),(0,l.kt)("li",{parentName:"ol"},"Not all index accesses can be safely refactored to array destructuring, unless the object is also iterable. You should use your own discretion when fixing the error.")),(0,l.kt)("h3",{id:"vars-on-top"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/vars-on-top"},(0,l.kt)("inlineCode",{parentName:"a"},"vars-on-top"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"We don't usually allow ",(0,l.kt)("inlineCode",{parentName:"p"},"var"),"s. When you do use them, put them at the top level of functions/scripts to minimize its quirks."),(0,l.kt)("h2",{id:"naming-conventions"},"Naming conventions"),(0,l.kt)("h3",{id:"camelcase"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/camelcase"},(0,l.kt)("inlineCode",{parentName:"a"},"camelcase"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Require destructured variables to be camelCase (",(0,l.kt)("inlineCode",{parentName:"li"},"ignoreDestructuring: false"),")"),(0,l.kt)("li",{parentName:"ul"},"Require global variables to be camelCase (",(0,l.kt)("inlineCode",{parentName:"li"},"ignoreGlobals: false"),")"),(0,l.kt)("li",{parentName:"ul"},"Require imported variables to be camelCase (",(0,l.kt)("inlineCode",{parentName:"li"},"ignoreImports: false"),")"),(0,l.kt)("li",{parentName:"ul"},"Ignore property names in object literals (",(0,l.kt)("inlineCode",{parentName:"li"},'properties: "never"'),")")))),(0,l.kt)("p",null,"Until we fully use ",(0,l.kt)("inlineCode",{parentName:"p"},"@typescript-eslint/naming-convention"),", we will still use this rule to enforce camelCase where possible. We don't check object properties because the object may be passed to a third-party library:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"checkESLint"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"({")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," config: {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," camel_case: "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"true"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"});"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"checkESLint"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"({")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," config: {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," camel_case: "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"true"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"});")))))),(0,l.kt)("h3",{id:"id-denylist"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/id-denylist"},(0,l.kt)("inlineCode",{parentName:"a"},"id-denylist"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"You may want to configure this yourself if you want to ban certain identifiers."),(0,l.kt)("h3",{id:"id-length"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/id-length"},(0,l.kt)("inlineCode",{parentName:"a"},"id-length"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"We don't think length is a good metric for name quality."),(0,l.kt)("h3",{id:"id-match"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/id-match"},(0,l.kt)("inlineCode",{parentName:"a"},"id-match"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"This rule is fully covered by ",(0,l.kt)("inlineCode",{parentName:"p"},"@typescript-eslint/naming-convention"),"."),(0,l.kt)("h3",{id:"no-shadow-restricted-names"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-shadow-restricted-names"},(0,l.kt)("inlineCode",{parentName:"a"},"no-shadow-restricted-names"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Don't declare a binding called ",(0,l.kt)("inlineCode",{parentName:"p"},"undefined"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"NaN"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"Infinity"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"eval"),", or ",(0,l.kt)("inlineCode",{parentName:"p"},"arguments"),". You know exactly what values they represent."),(0,l.kt)("h3",{id:"no-underscore-dangle"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-underscore-dangle"},(0,l.kt)("inlineCode",{parentName:"a"},"no-underscore-dangle"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"You should generally avoid underscored names and prefer proper encapsulation instead (such as through closures and private names). Do ",(0,l.kt)("em",{parentName:"p"},"not")," use underscores to represent throwaway names; just leave it unused (such cases include object destructuring to throw the property away, or function parameters). However, there are cases where you have to use underscores, such as when the name is expected by an external API."),(0,l.kt)("h2",{id:"globals"},"Globals"),(0,l.kt)("h3",{id:"no-alert"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-alert"},(0,l.kt)("inlineCode",{parentName:"a"},"no-alert"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"There is no good reason to use ",(0,l.kt)("inlineCode",{parentName:"p"},"alert"),"/",(0,l.kt)("inlineCode",{parentName:"p"},"confirm"),"/",(0,l.kt)("inlineCode",{parentName:"p"},"prompt")," in production. They are blocking and look too much like system dialogs."),(0,l.kt)("h3",{id:"no-console"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-console"},(0,l.kt)("inlineCode",{parentName:"a"},"no-console"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: can be enabled")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"console.log")," is commonly left as debugging artifacts and can occasionally disrupt the console log formatting. For example, Webpack has the unified ",(0,l.kt)("a",{parentName:"p",href:"https://webpack.js.org/api/logging/"},"logger interface")," for emitting messages. Projects are encouraged to encapsulate their own logger instance as well for unified message formatting and semantics."),(0,l.kt)("p",null,"However, in more casual projects without a wrapped logger, using ",(0,l.kt)("inlineCode",{parentName:"p"},"console.log")," may be intentional. This rule can be overridden in user-land."),(0,l.kt)("h3",{id:"no-eval"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-eval"},(0,l.kt)("inlineCode",{parentName:"a"},"no-eval"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Do not allow indirect ",(0,l.kt)("inlineCode",{parentName:"li"},"eval")," (",(0,l.kt)("inlineCode",{parentName:"li"},"allowIndirect: false"),")")))),(0,l.kt)("p",null,"There is not much reason you should use ",(0,l.kt)("inlineCode",{parentName:"p"},"eval"),"\u2014many safe alternatives exist. Indirect ",(0,l.kt)("inlineCode",{parentName:"p"},"eval")," in strict mode tends to be safe but is still frowned upon. In case you really need to dynamically evaluate code, use ",(0,l.kt)("inlineCode",{parentName:"p"},"new Function")," instead, which also allows injecting variables via parameters."),(0,l.kt)("h3",{id:"no-global-assign"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-global-assign"},(0,l.kt)("inlineCode",{parentName:"a"},"no-global-assign"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"We have to turn this rule off, because we cannot make ESLint aware of every global, so the reports are too inconsistent and unhelpful. However, you should know from your heart to only reassign variables in your scope. If you want to modify globals, use ",(0,l.kt)("inlineCode",{parentName:"p"},"globalThis.x")," instead to make your intention explicit."),(0,l.kt)("h3",{id:"no-implied-eval"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-implied-eval"},(0,l.kt)("inlineCode",{parentName:"a"},"no-implied-eval"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"There is no good reason to use ",(0,l.kt)("inlineCode",{parentName:"p"},"setTimeout"),"/",(0,l.kt)("inlineCode",{parentName:"p"},"setInterval")," with a string argument. Use a function instead."),(0,l.kt)("h3",{id:"no-iterator"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-iterator"},(0,l.kt)("inlineCode",{parentName:"a"},"no-iterator"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Don't use the ",(0,l.kt)("inlineCode",{parentName:"p"},"__iterator__")," property. No one implements it."),(0,l.kt)("h3",{id:"no-new-func"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-new-func"},(0,l.kt)("inlineCode",{parentName:"a"},"no-new-func"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"You should generally avoid using the ",(0,l.kt)("inlineCode",{parentName:"p"},"Function")," constructor, because it is just another form of dynamic evaluation. However, compared to ",(0,l.kt)("inlineCode",{parentName:"p"},"eval"),", it is easier to be used safely, and in case when you need to dynamically evaluate code, you should prefer to use this instead of ",(0,l.kt)("inlineCode",{parentName:"p"},"eval"),"."),(0,l.kt)("h3",{id:"no-new-native-nonconstructor"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-new-native-nonconstructor"},(0,l.kt)("inlineCode",{parentName:"a"},"no-new-native-nonconstructor"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ts(7009): 'new' expression, whose target lacks a construct signature, implicitly has an 'any' type."))))),(0,l.kt)("p",null,"Don't construct ",(0,l.kt)("inlineCode",{parentName:"p"},"Symbol")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"BigInt")," because they are not meant for construction."),(0,l.kt)("h3",{id:"no-new-wrappers"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-new-wrappers"},(0,l.kt)("inlineCode",{parentName:"a"},"no-new-wrappers"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Don't construct ",(0,l.kt)("inlineCode",{parentName:"p"},"String"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"Number"),", and ",(0,l.kt)("inlineCode",{parentName:"p"},"Boolean")," objects because they are much harder to use and do not have any benefits over primitives."),(0,l.kt)("h3",{id:"no-obj-calls"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-obj-calls"},(0,l.kt)("inlineCode",{parentName:"a"},"no-obj-calls"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ts(2349): This expression is not callable. Type 'Math' has no call signatures."))))),(0,l.kt)("p",null,"Don't call ",(0,l.kt)("inlineCode",{parentName:"p"},"Math"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"JSON"),", and other namespaces."),(0,l.kt)("h3",{id:"no-object-constructor"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-object-constructor"},(0,l.kt)("inlineCode",{parentName:"a"},"no-object-constructor"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Don't use ",(0,l.kt)("inlineCode",{parentName:"p"},"new Object()")," because it's just a longer way of writing ",(0,l.kt)("inlineCode",{parentName:"p"},"{}"),". Always use ",(0,l.kt)("inlineCode",{parentName:"p"},"Object")," with an argument."),(0,l.kt)("h3",{id:"no-proto"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-proto"},(0,l.kt)("inlineCode",{parentName:"a"},"no-proto"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Don't access the ",(0,l.kt)("inlineCode",{parentName:"p"},"__proto__")," property. Use ",(0,l.kt)("inlineCode",{parentName:"p"},"Object.getPrototypeOf")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"Object.setPrototypeOf")," instead. Note that the ",(0,l.kt)("inlineCode",{parentName:"p"},"__proto__")," syntax in object literals is still allowed and should be preferred over ",(0,l.kt)("inlineCode",{parentName:"p"},"Object.create"),"."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Write this:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"obj"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," __proto__: "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"};")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Instead of this:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"obj"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Object"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"create"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Write this:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"obj"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," __proto__: "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Instead of this:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"obj"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Object"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"create"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")))))),(0,l.kt)("admonition",{type:"note"},(0,l.kt)("p",{parentName:"admonition"},"TypeScript does not support the ",(0,l.kt)("inlineCode",{parentName:"p"},"__proto__")," syntax in object literals yet. However, ",(0,l.kt)("inlineCode",{parentName:"p"},"Object.create")," will be always typed as ",(0,l.kt)("inlineCode",{parentName:"p"},"any"),", so the former should still be preferred. Cast with ",(0,l.kt)("inlineCode",{parentName:"p"},"null as never")," when necessary.")),(0,l.kt)("h3",{id:"no-prototype-builtins"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-prototype-builtins"},(0,l.kt)("inlineCode",{parentName:"a"},"no-prototype-builtins"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Don't use ",(0,l.kt)("inlineCode",{parentName:"p"},"Object.prototype")," methods because they are not safe against ",(0,l.kt)("inlineCode",{parentName:"p"},"null")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"undefined"),". Generally, you don't need to jump hoops to get similar behavior."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Instead of:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"foo."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"hasOwnProperty"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"bar"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"foo."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"propertyIsEnumerable"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"bar"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"foo."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"isPrototypeOf"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(bar);")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Write:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Object"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"hasOwn"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(foo, "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"bar"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Object"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"getOwnPropertyDescriptor"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(foo, "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"bar"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},")?.enumerable;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Object"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"prototype"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},".isPrototypeOf."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"call"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(foo, bar); "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Do you really need this?"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Instead of:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"foo."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"hasOwnProperty"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"bar"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"foo."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"propertyIsEnumerable"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"bar"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"foo."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"isPrototypeOf"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(bar);")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Write:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Object"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"hasOwn"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(foo, "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"bar"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Object"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"getOwnPropertyDescriptor"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(foo, "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"bar"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},")?.enumerable;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Object"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"prototype"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".isPrototypeOf."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"call"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(foo, bar); "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Do you really need this?")))))),(0,l.kt)("h3",{id:"no-restricted-properties"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-restricted-properties"},(0,l.kt)("inlineCode",{parentName:"a"},"no-restricted-properties"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"You may want to configure this yourself if you want to ban certain identifiers or certain properties."),(0,l.kt)("h3",{id:"no-undef"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-undef"},(0,l.kt)("inlineCode",{parentName:"a"},"no-undef"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Disallow using ",(0,l.kt)("inlineCode",{parentName:"li"},"typeof")," on undefined variables (",(0,l.kt)("inlineCode",{parentName:"li"},"typeof: true"),")"))),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ts(2304): Cannot find name 'a'."))))),(0,l.kt)("p",null,"Don't use undefined variables. If you want to check if a variable is defined, use ",(0,l.kt)("inlineCode",{parentName:"p"},'if ("x" in globalThis)')," or ",(0,l.kt)("inlineCode",{parentName:"p"},'if (typeof globalThis.x !== "undefined")'),"."),(0,l.kt)("p",null,"Note that this rule is only useful in a plain-JS project. In a TypeScript project, you should use TypeScript checks instead. You may find cases where ESLint is unaware of a global variable. In this case, either change your ",(0,l.kt)("inlineCode",{parentName:"p"},"env")," setting, or use ",(0,l.kt)("inlineCode",{parentName:"p"},"globalThis.x"),"."),(0,l.kt)("h3",{id:"no-undefined"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-undefined"},(0,l.kt)("inlineCode",{parentName:"a"},"no-undefined"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"There's virtually no risk to use ",(0,l.kt)("inlineCode",{parentName:"p"},"undefined")," nowadays, especially with rules like ",(0,l.kt)("inlineCode",{parentName:"p"},"no-shadow-restricted-names"),". Furthermore, because ",(0,l.kt)("inlineCode",{parentName:"p"},"undefined"),' is so pervasive as the implicit "value of absence", it\'s hard to avoid it. You should generally use ',(0,l.kt)("inlineCode",{parentName:"p"},"undefined")," instead of ",(0,l.kt)("inlineCode",{parentName:"p"},"null")," as the default value, unless the latter has a semantic difference from ",(0,l.kt)("inlineCode",{parentName:"p"},"undefined"),"."),(0,l.kt)("h3",{id:"prefer-object-has-own"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-object-has-own"},(0,l.kt)("inlineCode",{parentName:"a"},"prefer-object-has-own"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Use ",(0,l.kt)("inlineCode",{parentName:"p"},"Object.hasOwn")," instead of ",(0,l.kt)("inlineCode",{parentName:"p"},"Object.prototype.hasOwnProperty.call"),". It's shorter and more readable. If you need compatibility, install a polyfill. (You should never use ",(0,l.kt)("inlineCode",{parentName:"p"},"x.hasOwnProperty"),", by the way; see ",(0,l.kt)("a",{parentName:"p",href:"#no-prototype-builtins"},(0,l.kt)("inlineCode",{parentName:"a"},"no-prototype-builtins")),".)"))}m.isMDXComponent=!0},5318:(e,a,t)=>{t.d(a,{Zo:()=>d,kt:()=>k});var n=t(7378);function l(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var a=1;a=0||(l[t]=e[t]);return l}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var i=n.createContext({}),p=function(e){var a=n.useContext(i),t=a;return e&&(t="function"==typeof e?e(a):o(o({},a),e)),t},d=function(e){var a=p(e.components);return n.createElement(i.Provider,{value:a},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},N=n.forwardRef((function(e,a){var t=e.components,l=e.mdxType,r=e.originalType,i=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=p(t),N=l,k=c["".concat(i,".").concat(N)]||c[N]||m[N]||r;return t?n.createElement(k,o(o({ref:a},d),{},{components:t})):n.createElement(k,o({ref:a},d))}));function k(e,a){var t=arguments,l=a&&a.mdxType;if("string"==typeof e||l){var r=t.length,o=new Array(r);o[0]=N;var s={};for(var i in a)hasOwnProperty.call(a,i)&&(s[i]=a[i]);s.originalType=e,s[c]="string"==typeof e?e:l,o[1]=s;for(var p=2;p{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[831],{1966:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/5b478ae0.358546da.js b/assets/js/5b478ae0.358546da.js new file mode 100644 index 0000000..a4403d1 --- /dev/null +++ b/assets/js/5b478ae0.358546da.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[375],{9916:(e,a,n)=>{n.d(a,{xA:()=>i,yg:()=>g});var l=n(3696);function r(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function t(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);a&&(l=l.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,l)}return n}function s(e){for(var a=1;a=0||(r[n]=e[n]);return r}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=l.createContext({}),y=function(e){var a=l.useContext(p),n=a;return e&&(n="function"==typeof e?e(a):s(s({},a),e)),n},i=function(e){var a=y(e.components);return l.createElement(p.Provider,{value:a},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var a=e.children;return l.createElement(l.Fragment,{},a)}},m=l.forwardRef((function(e,a){var n=e.components,r=e.mdxType,t=e.originalType,p=e.parentName,i=o(e,["components","mdxType","originalType","parentName"]),d=y(n),m=r,g=d["".concat(p,".").concat(m)]||d[m]||c[m]||t;return n?l.createElement(g,s(s({ref:a},i),{},{components:n})):l.createElement(g,s({ref:a},i))}));function g(e,a){var n=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var t=n.length,s=new Array(t);s[0]=m;var o={};for(var p in a)hasOwnProperty.call(a,p)&&(o[p]=a[p]);o.originalType=e,o[d]="string"==typeof e?e:r,s[1]=o;for(var y=2;y{n.r(a),n.d(a,{assets:()=>p,contentTitle:()=>s,default:()=>c,frontMatter:()=>t,metadata:()=>o,toc:()=>y});var l=n(8102),r=(n(3696),n(9916));const t={sidebar_position:5},s="Control flow",o={unversionedId:"eslint-base/control-flow",id:"eslint-base/control-flow",title:"Control flow",description:"This page introduces styles for all statements, such as if-else, loops, conditions, and general authoring of control flow.",source:"@site/../docs/eslint-base/control-flow.md",sourceDirName:"eslint-base",slug:"/eslint-base/control-flow",permalink:"/js-style-guide/eslint-base/control-flow",draft:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"defaultSidebar",previous:{title:"Operators",permalink:"/js-style-guide/eslint-base/operators"},next:{title:"Functions",permalink:"/js-style-guide/eslint-base/functions"}},p={},y=[{value:"Blocks",id:"blocks",level:2},{value:"no-empty",id:"no-empty",level:3},{value:"no-lone-blocks",id:"no-lone-blocks",level:3},{value:"Conditionals",id:"conditionals",level:2},{value:"no-constant-condition",id:"no-constant-condition",level:3},{value:"no-negated-condition",id:"no-negated-condition",level:3},{value:"if-else",id:"if-else",level:2},{value:"no-dupe-else-if",id:"no-dupe-else-if",level:3},{value:"no-else-return",id:"no-else-return",level:3},{value:"no-lonely-if",id:"no-lonely-if",level:3},{value:"Loops",id:"loops",level:2},{value:"for-direction",id:"for-direction",level:3},{value:"guard-for-in",id:"guard-for-in",level:3},{value:"no-continue",id:"no-continue",level:3},{value:"no-unmodified-loop-condition",id:"no-unmodified-loop-condition",level:3},{value:"no-unreachable-loop",id:"no-unreachable-loop",level:3},{value:"Use of for-in",id:"use-of-for-in",level:3},{value:"switch-case",id:"switch-case",level:2},{value:"default-case",id:"default-case",level:3},{value:"default-case-last",id:"default-case-last",level:3},{value:"no-case-declarations",id:"no-case-declarations",level:3},{value:"no-duplicate-case",id:"no-duplicate-case",level:3},{value:"no-fallthrough",id:"no-fallthrough",level:3},{value:"try-catch",id:"try-catch",level:2},{value:"no-ex-assign",id:"no-ex-assign",level:3},{value:"no-unsafe-finally",id:"no-unsafe-finally",level:3},{value:"no-useless-catch",id:"no-useless-catch",level:3},{value:"Labels",id:"labels",level:2},{value:"no-extra-label",id:"no-extra-label",level:3},{value:"no-label-var",id:"no-label-var",level:3},{value:"no-labels",id:"no-labels",level:3},{value:"no-unused-labels",id:"no-unused-labels",level:3},{value:"Other statements",id:"other-statements",level:2},{value:"no-debugger",id:"no-debugger",level:3},{value:"no-throw-literal",id:"no-throw-literal",level:3},{value:"no-unreachable",id:"no-unreachable",level:3},{value:"no-unused-expressions",id:"no-unused-expressions",level:3},{value:"no-with",id:"no-with",level:3},{value:"Complexity",id:"complexity",level:2},{value:"complexity",id:"complexity-1",level:3},{value:"max-depth",id:"max-depth",level:3},{value:"max-lines",id:"max-lines",level:3},{value:"max-statements",id:"max-statements",level:3}],i={toc:y},d="wrapper";function c(e){let{components:a,...n}=e;return(0,r.yg)(d,(0,l.A)({},i,n,{components:a,mdxType:"MDXLayout"}),(0,r.yg)("h1",{id:"control-flow"},"Control flow"),(0,r.yg)("p",null,"This page introduces styles for all statements, such as ",(0,r.yg)("inlineCode",{parentName:"p"},"if-else"),", loops, conditions, and general authoring of control flow."),(0,r.yg)("h2",{id:"blocks"},"Blocks"),(0,r.yg)("h3",{id:"no-empty"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-empty"},(0,r.yg)("inlineCode",{parentName:"a"},"no-empty"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Allow empty catch blocks (",(0,r.yg)("inlineCode",{parentName:"li"},"allowEmptyCatch: true"),")")))),(0,r.yg)("p",null,"Empty blocks are useless and are a sign of refactoring artifacts. The only exception is empty ",(0,r.yg)("inlineCode",{parentName:"p"},"catch")," blocks, which are used to ignore errors. However this should be rare too, and you should generally add a comment explaining why the error is ignored. This rule doesn't prevent an empty statement from being used, so you can still do this:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"for"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," a "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; a "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"<"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"10"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; a"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"++"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},");"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"for"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; a "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"<"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"10"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; a"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"++"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")))))),(0,r.yg)("p",null,"Although TypeScript doesn't allow the following when you want an ",(0,r.yg)("inlineCode",{parentName:"p"},"unless")," construct:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var Math: Math"},"Math")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Math.random(): number"},"random")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},">"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"0.5"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},")",(0,r.yg)("data-err",{parentName:"span"},";"))),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"The body of an 'if' statement cannot be the empty statement."),(0,r.yg)("span",{parentName:"span",className:"code"},"1313")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"The body of an 'if' statement cannot be the empty statement."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// do something when the condition is false")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var Math: Math"},"Math")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Math.random(): number"},"random")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},">"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"0.5"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},")",(0,r.yg)("data-err",{parentName:"span"},";"))),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"The body of an 'if' statement cannot be the empty statement."),(0,r.yg)("span",{parentName:"span",className:"code"},"1313")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"The body of an 'if' statement cannot be the empty statement."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// do something when the condition is false")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h3",{id:"no-lone-blocks"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-lone-blocks"},(0,r.yg)("inlineCode",{parentName:"a"},"no-lone-blocks"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"This rule only reports where the block is absolutely unnecessary (when it does not contain lexical declarations). Removing the block will be able to reduce indentation and lines."),(0,r.yg)("h2",{id:"conditionals"},"Conditionals"),(0,r.yg)("h3",{id:"no-constant-condition"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-constant-condition"},(0,r.yg)("inlineCode",{parentName:"a"},"no-constant-condition"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Disallow constant conditions in loops (",(0,r.yg)("inlineCode",{parentName:"li"},"checkLoops: true"),")")))),(0,r.yg)("p",null,"Constant conditions that always evaluate to truthy or falsy can be refactoring artifacts. In addition, infinite loops are also forbidden to prompt developers to consider alternatives like explicit exit conditions instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"break")," statements, or ",(0,r.yg)("inlineCode",{parentName:"p"},"setInterval"),"."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Instead of this:")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"while"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"true"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," curNode "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"findNextNode"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(curNode);")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"isTargetNode"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(curNode)) "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"break"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Do this:")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"do"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," curNode "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"findNextNode"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(curNode);")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"while"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"!"),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"isTargetNode"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(curNode));"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Instead of this:")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"while"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"true"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," curNode "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"findNextNode"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(curNode);")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"isTargetNode"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(curNode)) "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"break"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Do this:")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"do"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," curNode "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"findNextNode"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(curNode);")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"while"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"!"),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"isTargetNode"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(curNode));")))))),(0,r.yg)("p",null,"In the very rare case where you do need an infinite loop (such as when the program is a message loop), use a disable comment. Note that ",(0,r.yg)("inlineCode",{parentName:"p"},"for (;;)")," is also a viable workaround where really intended."),(0,r.yg)("h3",{id:"no-negated-condition"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-negated-condition"},(0,r.yg)("inlineCode",{parentName:"a"},"no-negated-condition"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"You should generally avoid using negative conditions when the two cases have equal weight:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"!"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"isFoo) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// 10 lines")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// 10 lines")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"!"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"isFoo) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// 10 lines")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// 10 lines")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("p",null,"However, in the case where one case is either much more common or much shorter, put the shorter case first, so it can get out of readers' minds early:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"!"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"isReady) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// 5 lines")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// 50 lines")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"!"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"isReady) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// 5 lines")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// 50 lines")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("p",null,"But in this case, consider whether you can use early return, so you can omit the ",(0,r.yg)("inlineCode",{parentName:"p"},"else")," block altogether."),(0,r.yg)("h2",{id:"if-else"},(0,r.yg)("inlineCode",{parentName:"h2"},"if-else")),(0,r.yg)("h3",{id:"no-dupe-else-if"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-dupe-else-if"},(0,r.yg)("inlineCode",{parentName:"a"},"no-dupe-else-if"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"It is probably a mistake, or at least extremely confusing, to have the same condition written twice. If each condition leads to a side effect, consider restructuring your code."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," a "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (a"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"++"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// a was originally 3")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (a"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"++"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// a was originally 2")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (a"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"++"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// a was originally 1")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (a"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"++"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// a was originally 3")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (a"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"++"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// a was originally 2")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (a"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"++"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// a was originally 1")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," a "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," hasFound "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"false"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"while"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (a"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"++"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"<="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"&&"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"!"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"hasFound) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (a "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") hasFound "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"true"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," hasFound "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"false"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"while"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (a"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"++"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"<="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"&&"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"!"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"hasFound) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (a "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") hasFound "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"true"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h3",{id:"no-else-return"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-else-return"},(0,r.yg)("inlineCode",{parentName:"a"},"no-else-return"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Allow ",(0,r.yg)("inlineCode",{parentName:"li"},"else if")," after the previous block ends with ",(0,r.yg)("inlineCode",{parentName:"li"},"return")," (",(0,r.yg)("inlineCode",{parentName:"li"},"allowElseIf: true"),")")))),(0,r.yg)("p",null,"Using ",(0,r.yg)("inlineCode",{parentName:"p"},"return")," at the top level instead of within ",(0,r.yg)("inlineCode",{parentName:"p"},"else")," allows you to write with less indentation. It also prevents accidental unreachable code. ",(0,r.yg)("inlineCode",{parentName:"p"},"else if")," is allowed because it leads to fewer lines compared to two separate ",(0,r.yg)("inlineCode",{parentName:"p"},"if")," statements, and also makes the flow clearer."),(0,r.yg)("h3",{id:"no-lonely-if"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-lonely-if"},(0,r.yg)("inlineCode",{parentName:"a"},"no-lonely-if"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Do not use an ",(0,r.yg)("inlineCode",{parentName:"p"},"if")," statement as the only statement in an ",(0,r.yg)("inlineCode",{parentName:"p"},"else")," block. Use ",(0,r.yg)("inlineCode",{parentName:"p"},"else if")," instead."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (something) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (somethingElse) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (something) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (somethingElse) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h2",{id:"loops"},"Loops"),(0,r.yg)("h3",{id:"for-direction"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/for-direction"},(0,r.yg)("inlineCode",{parentName:"a"},"for-direction"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"The for loop should always be iterating in the correct direction, which means increment + check for upper bound, or decrement + check for lower bound."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"for"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," i "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"10"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; i "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},">="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; i"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"++"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") console."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(i); "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> 10 11 12 13 ..."))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"for"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," i "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"10"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; i "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},">="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; i"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"++"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") console."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(i); "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> 10 11 12 13 ...")))))),(0,r.yg)("h3",{id:"guard-for-in"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/guard-for-in"},(0,r.yg)("inlineCode",{parentName:"a"},"guard-for-in"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"We ban ",(0,r.yg)("inlineCode",{parentName:"p"},"for...in")," loops altogether via ",(0,r.yg)("inlineCode",{parentName:"p"},"no-restricted-syntax"),". In the rare case where you actually use ",(0,r.yg)("inlineCode",{parentName:"p"},"for...in"),", we assume you know what you are doing and you actually intend to visit the prototype chain."),(0,r.yg)("h3",{id:"no-continue"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-continue"},(0,r.yg)("inlineCode",{parentName:"a"},"no-continue"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,(0,r.yg)("inlineCode",{parentName:"p"},"continue")," is a way of early-bailing to avoid creating extra indentation. Instead of this:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"for"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"line"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"of"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," lines) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (line."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"trim"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"()."),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"length"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},">"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// 20 lines of handling this line...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"for"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"line"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"of"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," lines) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (line."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"trim"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"()."),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"length"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},">"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// 20 lines of handling this line...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("p",null,"Prefer this:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"for"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"line"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"of"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," lines) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (line."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"trim"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"()."),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"length"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"continue"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// 20 lines of handling this line...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"for"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"line"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"of"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," lines) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (line."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"trim"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"()."),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"length"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"continue"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// 20 lines of handling this line...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h3",{id:"no-unmodified-loop-condition"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unmodified-loop-condition"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unmodified-loop-condition"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Unmodified loop conditions are usually a mistake. Note that this rule may have false-positives but the chances are low."),(0,r.yg)("h3",{id:"no-unreachable-loop"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unreachable-loop"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unreachable-loop"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Allow no exceptions (",(0,r.yg)("inlineCode",{parentName:"li"},"ignore: []"),")")))),(0,r.yg)("p",null,"Do not write loops that only run once. Either use an ",(0,r.yg)("inlineCode",{parentName:"p"},"if")," statement instead or put the ",(0,r.yg)("inlineCode",{parentName:"p"},"break")," inside a conditional."),(0,r.yg)("h3",{id:"use-of-for-in"},"Use of ",(0,r.yg)("inlineCode",{parentName:"h3"},"for-in")),(0,r.yg)("p",null,"We ban ",(0,r.yg)("inlineCode",{parentName:"p"},"for...in")," loops altogether via ",(0,r.yg)("inlineCode",{parentName:"p"},"no-restricted-syntax"),". This is because it traverses the prototype chain, which is almost never what you want. Usually, you should refactor ",(0,r.yg)("inlineCode",{parentName:"p"},"for (const key in obj)")," to ",(0,r.yg)("inlineCode",{parentName:"p"},"for (const key of Object.keys(obj))"),", or consider if you meant ",(0,r.yg)("inlineCode",{parentName:"p"},"for-of")," in the first place."),(0,r.yg)("h2",{id:"switch-case"},(0,r.yg)("inlineCode",{parentName:"h2"},"switch-case")),(0,r.yg)("h3",{id:"default-case"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/default-case"},(0,r.yg)("inlineCode",{parentName:"a"},"default-case"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"We do not require a default case, because it is very idiomatic to use ",(0,r.yg)("inlineCode",{parentName:"p"},"switch-case")," when we do know that the value falls within a finite range."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"type"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'type TreeNode = {\n type: "leaf";\n value: number;\n} | {\n type: "parent";\n children: TreeNode[];\n}'},"TreeNode")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," { "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) type: "leaf"'},"type")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"leaf"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) value: number"},"value")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," { "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) type: "parent"'},"type")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"parent"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) children: TreeNode[]"},"children")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'type TreeNode = {\n type: "leaf";\n value: number;\n} | {\n type: "parent";\n children: TreeNode[];\n}'},"TreeNode")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"[] };")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function transformNode(node: TreeNode): void"},"transformNode")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) node: TreeNode"},"node")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'type TreeNode = {\n type: "leaf";\n value: number;\n} | {\n type: "parent";\n children: TreeNode[];\n}'},"TreeNode")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"switch"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) node: TreeNode"},"node"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) type: "leaf" | "parent"'},"type"),") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"case"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"leaf"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},":")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(parameter) node: {\n type: "leaf";\n value: number;\n}'},"node"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) value: number"},"value")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"++"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"break"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"case"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"parent"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},":")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(parameter) node: {\n type: "parent";\n children: TreeNode[];\n}'},"node"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) children: TreeNode[]"},"children"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Array.forEach(callbackfn: (value: TreeNode, index: number, array: TreeNode[]) => void, thisArg?: any): void"},"forEach")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.yg)("data-lsp",{parentName:"span",lsp:"function transformNode(node: TreeNode): void"},"transformNode"),");")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"break"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"default"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},":")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// This will never happen given proper boundary typing and input")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// validation, but results in useless non-test-covered lines. Just omit")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// the default case.")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// @ts-expect-error: should never happen")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"throw"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var Error: ErrorConstructor\nnew (message?: string | undefined) => Error"},"Error")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"`Bad node type ${"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) node: never"},"node")),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"any"},"type")),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"type"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'type TreeNode = {\n type: "leaf";\n value: number;\n} | {\n type: "parent";\n children: TreeNode[];\n}'},"TreeNode")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) type: "leaf"'},"type")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"leaf"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) value: number"},"value")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) type: "parent"'},"type")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"parent"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) children: TreeNode[]"},"children")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'type TreeNode = {\n type: "leaf";\n value: number;\n} | {\n type: "parent";\n children: TreeNode[];\n}'},"TreeNode")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[] };")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function transformNode(node: TreeNode): void"},"transformNode")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) node: TreeNode"},"node")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'type TreeNode = {\n type: "leaf";\n value: number;\n} | {\n type: "parent";\n children: TreeNode[];\n}'},"TreeNode")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"switch"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) node: TreeNode"},"node"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) type: "leaf" | "parent"'},"type"),") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"case"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"leaf"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},":")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(parameter) node: {\n type: "leaf";\n value: number;\n}'},"node"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) value: number"},"value")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"++"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"break"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"case"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"parent"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},":")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(parameter) node: {\n type: "parent";\n children: TreeNode[];\n}'},"node"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) children: TreeNode[]"},"children"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Array.forEach(callbackfn: (value: TreeNode, index: number, array: TreeNode[]) => void, thisArg?: any): void"},"forEach")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.yg)("data-lsp",{parentName:"span",lsp:"function transformNode(node: TreeNode): void"},"transformNode"),");")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"break"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"default"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},":")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// This will never happen given proper boundary typing and input")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// validation, but results in useless non-test-covered lines. Just omit")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// the default case.")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// @ts-expect-error: should never happen")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"throw"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var Error: ErrorConstructor\nnew (message?: string | undefined) => Error"},"Error")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`Bad node type ${"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) node: never"},"node")),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"any"},"type")),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("p",null,"More favorably, ",(0,r.yg)("em",{parentName:"p"},"only")," use switch-case if the matched value has a finite range (e.g. a union of literals). If it can be any value, use if-else instead."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"type"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"type Res = {\n code: 200;\n body: string;\n error: never;\n} | {\n code: number;\n error: string;\n body: never;\n}"},"Res")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) code: 200"},"code")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"200"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) body: string"},"body")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) error: never"},"error")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"never"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," { "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) error: string"},"error")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) body: never"},"body")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"never"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," };")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function handleResponse(res: Res): string"},"handleResponse")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"type Res = {\n code: 200;\n body: string;\n error: never;\n} | {\n code: number;\n error: string;\n body: never;\n}"},"Res")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"404"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"Not found"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," } "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"500"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"Server error"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," } "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"200"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) body: string"},"body"),";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," } "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"`Unknown response shape: ${"),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var JSON: JSON"},"JSON")),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) JSON.stringify(value: any, replacer?: ((this: any, key: string, value: any) => any) | undefined, space?: string | number | undefined): string (+1 overload)"},"stringify")),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res")),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},")"),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"type"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"type Res = {\n code: 200;\n body: string;\n error: never;\n} | {\n code: number;\n error: string;\n body: never;\n}"},"Res")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) code: 200"},"code")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"200"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) body: string"},"body")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) error: never"},"error")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"never"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) error: string"},"error")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) body: never"},"body")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"never"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," };")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function handleResponse(res: Res): string"},"handleResponse")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"type Res = {\n code: 200;\n body: string;\n error: never;\n} | {\n code: number;\n error: string;\n body: never;\n}"},"Res")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"404"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"Not found"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," } "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"500"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"Server error"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," } "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"200"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) body: string"},"body"),";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," } "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`Unknown response shape: ${"),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var JSON: JSON"},"JSON")),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) JSON.stringify(value: any, replacer?: ((this: any, key: string, value: any) => any) | undefined, space?: string | number | undefined): string (+1 overload)"},"stringify")),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res")),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},")"),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("p",null,"You may ask, what if the type doesn't reflect the full range of possible runtime input? The answer is, you are missing input validation. Writing incomplete types is going to cause troubles elsewhere, if not here."),(0,r.yg)("h3",{id:"default-case-last"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/default-case-last"},(0,r.yg)("inlineCode",{parentName:"a"},"default-case-last"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"In case where there's indeed a default case, we require it to be placed last. This is because a default case means, well, that all ",(0,r.yg)("em",{parentName:"p"},"previous")," matches have failed. When reading the code, the reader is more interested in what the ",(0,r.yg)("em",{parentName:"p"},"previous")," specified cases are rather than what the fallback behavior is."),(0,r.yg)("h3",{id:"no-case-declarations"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-case-declarations"},(0,r.yg)("inlineCode",{parentName:"a"},"no-case-declarations"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"If a case contains lexical declarations, it must be wrapped in a block. This is because the ",(0,r.yg)("inlineCode",{parentName:"p"},"case")," are more like labels and do not create their own scope. This may lead to unexpected bugs, especially if there's fallthrough."),(0,r.yg)("p",null,"TODO: examples?"),(0,r.yg)("h3",{id:"no-duplicate-case"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-duplicate-case"},(0,r.yg)("inlineCode",{parentName:"a"},"no-duplicate-case"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"See ",(0,r.yg)("a",{parentName:"p",href:"#no-dupe-else-if"},(0,r.yg)("inlineCode",{parentName:"a"},"no-dupe-else-if")),"."),(0,r.yg)("h3",{id:"no-fallthrough"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-fallthrough"},(0,r.yg)("inlineCode",{parentName:"a"},"no-fallthrough"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Allow empty cases to fall through (",(0,r.yg)("inlineCode",{parentName:"li"},"allowEmptyCase: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Do not allow comments (",(0,r.yg)("inlineCode",{parentName:"li"},"commentPattern: undefined"),")")))),(0,r.yg)("p",null,"It is a common error to forget ",(0,r.yg)("inlineCode",{parentName:"p"},"break"),". In cases where you do want to fall through, use a disable comment, which is just as expressive as a custom comment like ",(0,r.yg)("inlineCode",{parentName:"p"},"// fallthrough"),"."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"switch"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (a) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"case"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},":")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// eslint-disable-next-line no-fallthrough")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"case"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},":")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"switch"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (a) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"case"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},":")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// eslint-disable-next-line no-fallthrough")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"case"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},":")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h2",{id:"try-catch"},(0,r.yg)("inlineCode",{parentName:"h2"},"try-catch")),(0,r.yg)("h3",{id:"no-ex-assign"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-ex-assign"},(0,r.yg)("inlineCode",{parentName:"a"},"no-ex-assign"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"There aren't many good reasons for re-assigning ",(0,r.yg)("inlineCode",{parentName:"p"},"err")," in a ",(0,r.yg)("inlineCode",{parentName:"p"},"catch")," block. In TypeScript, its type is always ",(0,r.yg)("inlineCode",{parentName:"p"},"unknown"),", so even if you normalize its type in value-land, you still have to cast it to a more specific type to use it."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"try"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"catch"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,r.yg)("data-lsp",{parentName:"span",lsp:"var err: unknown"},"err"),") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"var err: unknown",style:{borderBottom:"solid 2px lightgrey"}},"err")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var Error: ErrorConstructor\nnew (message?: string | undefined) => Error"},"Error")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var String: StringConstructor\n(value?: any) => string"},"String")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.yg)("data-lsp",{parentName:"span",lsp:"var err: unknown",style:{borderBottom:"solid 2px lightgrey"}},"err"),")); "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// err is still unknown")),(0,r.yg)("div",{parentName:"code",className:"meta-line"},(0,r.yg)("span",{parentName:"div",className:"popover-prefix"}," "),(0,r.yg)("span",{parentName:"div",className:"popover"},(0,r.yg)("div",{parentName:"span",className:"arrow"}),"var err: unknown")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"try"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"catch"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,r.yg)("data-lsp",{parentName:"span",lsp:"var err: unknown"},"err"),") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"var err: unknown",style:{borderBottom:"solid 2px lightgrey"}},"err")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var Error: ErrorConstructor\nnew (message?: string | undefined) => Error"},"Error")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var String: StringConstructor\n(value?: any) => string"},"String")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.yg)("data-lsp",{parentName:"span",lsp:"var err: unknown",style:{borderBottom:"solid 2px lightgrey"}},"err"),")); "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// err is still unknown")),(0,r.yg)("div",{parentName:"code",className:"meta-line"},(0,r.yg)("span",{parentName:"div",className:"popover-prefix"}," "),(0,r.yg)("span",{parentName:"div",className:"popover"},(0,r.yg)("div",{parentName:"span",className:"arrow"}),"var err: unknown")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("p",null,"Just create a new variable instead."),(0,r.yg)("h3",{id:"no-unsafe-finally"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unsafe-finally"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unsafe-finally"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Do not use control-flow statements (",(0,r.yg)("inlineCode",{parentName:"p"},"return")," or ",(0,r.yg)("inlineCode",{parentName:"p"},"throw")," in particular) in a ",(0,r.yg)("inlineCode",{parentName:"p"},"finally")," block. This overwrites the completion value of the ",(0,r.yg)("inlineCode",{parentName:"p"},"try")," block."),(0,r.yg)("p",null,"Note that errors may still be thrown from the ",(0,r.yg)("inlineCode",{parentName:"p"},"finally")," block but the possibility is low. When this happens, it usually means something very bad had happened and is not up to the developer to handle anyway."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"try"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"finally"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"closeFile"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(); "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// May still throw if the file fails to close")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"try"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"finally"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"closeFile"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(); "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// May still throw if the file fails to close")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h3",{id:"no-useless-catch"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-catch"},(0,r.yg)("inlineCode",{parentName:"a"},"no-useless-catch"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Do not use ",(0,r.yg)("inlineCode",{parentName:"p"},"try-catch")," blocks that only re-throw the caught error. This is a sign of refactoring artifacts."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"try"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"catch"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (e) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Maybe you intend to have some additional handling here?")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"throw"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," e;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"try"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"catch"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (e) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Maybe you intend to have some additional handling here?")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"throw"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," e;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h2",{id:"labels"},"Labels"),(0,r.yg)("h3",{id:"no-extra-label"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-extra-label"},(0,r.yg)("inlineCode",{parentName:"a"},"no-extra-label"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Only use a label when it can break out of nested loops. Do not use labels if the ",(0,r.yg)("inlineCode",{parentName:"p"},"break"),"/",(0,r.yg)("inlineCode",{parentName:"p"},"continue")," functions correctly without them."),(0,r.yg)("h3",{id:"no-label-var"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-label-var"},(0,r.yg)("inlineCode",{parentName:"a"},"no-label-var"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Do not give a label the same name as a variable. This is potentially confusing."),(0,r.yg)("h3",{id:"no-labels"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-labels"},(0,r.yg)("inlineCode",{parentName:"a"},"no-labels"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"We allow labels. They are useful for breaking out of nested loops. However, we ban unnecessary labels with ",(0,r.yg)("inlineCode",{parentName:"p"},"no-extra-label")," and unused labels with ",(0,r.yg)("inlineCode",{parentName:"p"},"no-unused-labels"),", which should eliminate most of the problems with accidental labels."),(0,r.yg)("h3",{id:"no-unused-labels"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unused-labels"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unused-labels"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(7028): Unused label."))))),(0,r.yg)("p",null,"Do not declare labels that are not used. This is the same mistake as declaring unused variables, and is potentially worse because labels are very rare, and unused labels are usually signs of miswritten code, such as ",(0,r.yg)("inlineCode",{parentName:"p"},"() => { a: 1 }")," where ",(0,r.yg)("inlineCode",{parentName:"p"},"a")," is parsed as a label."),(0,r.yg)("h2",{id:"other-statements"},"Other statements"),(0,r.yg)("h3",{id:"no-debugger"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-debugger"},(0,r.yg)("inlineCode",{parentName:"a"},"no-debugger"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"You should never have ",(0,r.yg)("inlineCode",{parentName:"p"},"debugger")," statements in production code."),(0,r.yg)("h3",{id:"no-throw-literal"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-throw-literal"},(0,r.yg)("inlineCode",{parentName:"a"},"no-throw-literal"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"You should always throw one of the following:"),(0,r.yg)("ol",null,(0,r.yg)("li",{parentName:"ol"},"Newly created ",(0,r.yg)("inlineCode",{parentName:"li"},"Error")," instances"),(0,r.yg)("li",{parentName:"ol"},"In the case of re-throwing: the caught error"),(0,r.yg)("li",{parentName:"ol"},"In the case of an API returning an error wrapped in a result: the expression representing that error (usually ",(0,r.yg)("inlineCode",{parentName:"li"},"result.error"),", etc.)")),(0,r.yg)("p",null,"Throwing a string literal is never allowed because it doesn't contain the stack trace and other APIs expecting ",(0,r.yg)("inlineCode",{parentName:"p"},"Error")," instances may not function correctly. There are some API designs that require using ",(0,r.yg)("inlineCode",{parentName:"p"},"throw")," (like ",(0,r.yg)("inlineCode",{parentName:"p"},"throw redirect(301)"),") but such cases are extremely rare."),(0,r.yg)("h3",{id:"no-unreachable"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unreachable"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unreachable"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(7027): Unreachable code detected."))))),(0,r.yg)("p",null,"Unreachable code is always a mistake. Furthermore, TypeScript gives up on control-flow analysis inside unreachable code, so you may get type errors that are not real."),(0,r.yg)("h3",{id:"no-unused-expressions"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unused-expressions"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unused-expressions"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Allow short-circuiting operators (",(0,r.yg)("inlineCode",{parentName:"li"},"allowShortCircuit: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Allow ternary expressions (",(0,r.yg)("inlineCode",{parentName:"li"},"allowTernary: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Allow tagged templates (",(0,r.yg)("inlineCode",{parentName:"li"},"allowTaggedTemplates: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Disallow unused JSX expressions (",(0,r.yg)("inlineCode",{parentName:"li"},"enforceForJSX: true"),")"))),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/js-style-guide/typescript/base#no-unused-expressions"},(0,r.yg)("inlineCode",{parentName:"a"},"@typescript-eslint/no-unused-expressions")))))),(0,r.yg)("p",null,"Every expression statement must have some side-effect. We allow only the following expressions as statements:"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Assignments"),(0,r.yg)("li",{parentName:"ul"},"Calls (including ",(0,r.yg)("inlineCode",{parentName:"li"},"new"),", tagged templates, and ",(0,r.yg)("inlineCode",{parentName:"li"},"import()"),")"),(0,r.yg)("li",{parentName:"ul"},"Logical operators (",(0,r.yg)("inlineCode",{parentName:"li"},"&&"),", ",(0,r.yg)("inlineCode",{parentName:"li"},"||"),", ",(0,r.yg)("inlineCode",{parentName:"li"},"??"),", ",(0,r.yg)("inlineCode",{parentName:"li"},"? :"),") to substitute for control-flow statements like ",(0,r.yg)("inlineCode",{parentName:"li"},"if...else"))),(0,r.yg)("h3",{id:"no-with"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-with"},(0,r.yg)("inlineCode",{parentName:"a"},"no-with"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(1101): 'with' statements are not allowed in strict mode."))))),(0,r.yg)("p",null,(0,r.yg)("inlineCode",{parentName:"p"},"with")," is forbidden in strict mode. It is also forbidden in TypeScript and causes TypeScript to give up on any type checking."),(0,r.yg)("h2",{id:"complexity"},"Complexity"),(0,r.yg)("p",null,"We don't think there's a single good metric of code complexity. We optimize for readability instead, and sometimes workarounds to \"high complexity\" code actually reduces readability by fragments the code into chunks that are hard to trace. Therefore, most of the rules aiming to limit complexity are disabled."),(0,r.yg)("h3",{id:"complexity-1"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/complexity"},(0,r.yg)("inlineCode",{parentName:"a"},"complexity"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("h3",{id:"max-depth"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-depth"},(0,r.yg)("inlineCode",{parentName:"a"},"max-depth"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("h3",{id:"max-lines"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-lines"},(0,r.yg)("inlineCode",{parentName:"a"},"max-lines"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("h3",{id:"max-statements"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-statements"},(0,r.yg)("inlineCode",{parentName:"a"},"max-statements"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5b478ae0.cb3fa351.js b/assets/js/5b478ae0.cb3fa351.js deleted file mode 100644 index 450c96b..0000000 --- a/assets/js/5b478ae0.cb3fa351.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[308],{9220:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>o,toc:()=>i});var n=t(2685),l=(t(7378),t(5318));const r={sidebar_position:5},s="Control flow",o={unversionedId:"eslint-base/control-flow",id:"eslint-base/control-flow",title:"Control flow",description:"This page introduces styles for all statements, such as if-else, loops, conditions, and general authoring of control flow.",source:"@site/../docs/eslint-base/control-flow.md",sourceDirName:"eslint-base",slug:"/eslint-base/control-flow",permalink:"/js-style-guide/eslint-base/control-flow",draft:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"defaultSidebar",previous:{title:"Operators",permalink:"/js-style-guide/eslint-base/operators"},next:{title:"Functions",permalink:"/js-style-guide/eslint-base/functions"}},p={},i=[{value:"Blocks",id:"blocks",level:2},{value:"no-empty",id:"no-empty",level:3},{value:"no-lone-blocks",id:"no-lone-blocks",level:3},{value:"Conditionals",id:"conditionals",level:2},{value:"no-constant-condition",id:"no-constant-condition",level:3},{value:"no-negated-condition",id:"no-negated-condition",level:3},{value:"if-else",id:"if-else",level:2},{value:"no-dupe-else-if",id:"no-dupe-else-if",level:3},{value:"no-else-return",id:"no-else-return",level:3},{value:"no-lonely-if",id:"no-lonely-if",level:3},{value:"Loops",id:"loops",level:2},{value:"for-direction",id:"for-direction",level:3},{value:"guard-for-in",id:"guard-for-in",level:3},{value:"no-continue",id:"no-continue",level:3},{value:"no-unmodified-loop-condition",id:"no-unmodified-loop-condition",level:3},{value:"no-unreachable-loop",id:"no-unreachable-loop",level:3},{value:"Use of for-in",id:"use-of-for-in",level:3},{value:"switch-case",id:"switch-case",level:2},{value:"default-case",id:"default-case",level:3},{value:"default-case-last",id:"default-case-last",level:3},{value:"no-case-declarations",id:"no-case-declarations",level:3},{value:"no-duplicate-case",id:"no-duplicate-case",level:3},{value:"no-fallthrough",id:"no-fallthrough",level:3},{value:"try-catch",id:"try-catch",level:2},{value:"no-ex-assign",id:"no-ex-assign",level:3},{value:"no-unsafe-finally",id:"no-unsafe-finally",level:3},{value:"no-useless-catch",id:"no-useless-catch",level:3},{value:"Labels",id:"labels",level:2},{value:"no-extra-label",id:"no-extra-label",level:3},{value:"no-label-var",id:"no-label-var",level:3},{value:"no-labels",id:"no-labels",level:3},{value:"no-unused-labels",id:"no-unused-labels",level:3},{value:"Other statements",id:"other-statements",level:2},{value:"no-debugger",id:"no-debugger",level:3},{value:"no-throw-literal",id:"no-throw-literal",level:3},{value:"no-unreachable",id:"no-unreachable",level:3},{value:"no-unused-expressions",id:"no-unused-expressions",level:3},{value:"no-with",id:"no-with",level:3},{value:"Complexity",id:"complexity",level:2},{value:"complexity",id:"complexity-1",level:3},{value:"max-depth",id:"max-depth",level:3},{value:"max-lines",id:"max-lines",level:3},{value:"max-statements",id:"max-statements",level:3}],d={toc:i},c="wrapper";function m(e){let{components:a,...t}=e;return(0,l.kt)(c,(0,n.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"control-flow"},"Control flow"),(0,l.kt)("p",null,"This page introduces styles for all statements, such as ",(0,l.kt)("inlineCode",{parentName:"p"},"if-else"),", loops, conditions, and general authoring of control flow."),(0,l.kt)("h2",{id:"blocks"},"Blocks"),(0,l.kt)("h3",{id:"no-empty"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-empty"},(0,l.kt)("inlineCode",{parentName:"a"},"no-empty"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Allow empty catch blocks (",(0,l.kt)("inlineCode",{parentName:"li"},"allowEmptyCatch: true"),")")))),(0,l.kt)("p",null,"Empty blocks are useless and are a sign of refactoring artifacts. The only exception is empty ",(0,l.kt)("inlineCode",{parentName:"p"},"catch")," blocks, which are used to ignore errors. However this should be rare too, and you should generally add a comment explaining why the error is ignored. This rule doesn't prevent an empty statement from being used, so you can still do this:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"for"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," a "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; a "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"<"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"10"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; a"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"++"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"for"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; a "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"<"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"10"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; a"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"++"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")))))),(0,l.kt)("p",null,"Although TypeScript doesn't allow the following when you want an ",(0,l.kt)("inlineCode",{parentName:"p"},"unless")," construct:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"var Math: Math"},"Math")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(method) Math.random(): number"},"random")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},">"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"0.5"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},")",(0,l.kt)("data-err",{parentName:"span"},";"))),(0,l.kt)("span",{parentName:"code",className:"error"},(0,l.kt)("span",{parentName:"span"},"The body of an 'if' statement cannot be the empty statement."),(0,l.kt)("span",{parentName:"span",className:"code"},"1313")),(0,l.kt)("span",{parentName:"code",className:"error-behind"},"The body of an 'if' statement cannot be the empty statement."),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// do something when the condition is false")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"var Math: Math"},"Math")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(method) Math.random(): number"},"random")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},">"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"0.5"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},")",(0,l.kt)("data-err",{parentName:"span"},";"))),(0,l.kt)("span",{parentName:"code",className:"error"},(0,l.kt)("span",{parentName:"span"},"The body of an 'if' statement cannot be the empty statement."),(0,l.kt)("span",{parentName:"span",className:"code"},"1313")),(0,l.kt)("span",{parentName:"code",className:"error-behind"},"The body of an 'if' statement cannot be the empty statement."),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// do something when the condition is false")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("h3",{id:"no-lone-blocks"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-lone-blocks"},(0,l.kt)("inlineCode",{parentName:"a"},"no-lone-blocks"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"This rule only reports where the block is absolutely unnecessary (when it does not contain lexical declarations). Removing the block will be able to reduce indentation and lines."),(0,l.kt)("h2",{id:"conditionals"},"Conditionals"),(0,l.kt)("h3",{id:"no-constant-condition"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-constant-condition"},(0,l.kt)("inlineCode",{parentName:"a"},"no-constant-condition"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Disallow constant conditions in loops (",(0,l.kt)("inlineCode",{parentName:"li"},"checkLoops: true"),")")))),(0,l.kt)("p",null,"Constant conditions that always evaluate to truthy or falsy can be refactoring artifacts. In addition, infinite loops are also forbidden to prompt developers to consider alternatives like explicit exit conditions instead of ",(0,l.kt)("inlineCode",{parentName:"p"},"break")," statements, or ",(0,l.kt)("inlineCode",{parentName:"p"},"setInterval"),"."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Instead of this:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"while"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"true"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," curNode "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"findNextNode"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(curNode);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"isTargetNode"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(curNode)) "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"break"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Do this:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"do"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," curNode "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"findNextNode"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(curNode);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"while"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"!"),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"isTargetNode"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(curNode));"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Instead of this:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"while"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"true"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," curNode "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"findNextNode"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(curNode);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"isTargetNode"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(curNode)) "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"break"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Do this:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"do"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," curNode "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"findNextNode"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(curNode);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"while"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"!"),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"isTargetNode"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(curNode));")))))),(0,l.kt)("p",null,"In the very rare case where you do need an infinite loop (such as when the program is a message loop), use a disable comment. Note that ",(0,l.kt)("inlineCode",{parentName:"p"},"for (;;)")," is also a viable workaround where really intended."),(0,l.kt)("h3",{id:"no-negated-condition"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-negated-condition"},(0,l.kt)("inlineCode",{parentName:"a"},"no-negated-condition"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"You should generally avoid using negative conditions when the two cases have equal weight:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"!"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"isFoo) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// 10 lines")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// 10 lines")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"!"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"isFoo) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// 10 lines")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// 10 lines")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("p",null,"However, in the case where one case is either much more common or much shorter, put the shorter case first, so it can get out of readers' minds early:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"!"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"isReady) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// 5 lines")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// 50 lines")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"!"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"isReady) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// 5 lines")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// 50 lines")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("p",null,"But in this case, consider whether you can use early return, so you can omit the ",(0,l.kt)("inlineCode",{parentName:"p"},"else")," block altogether."),(0,l.kt)("h2",{id:"if-else"},(0,l.kt)("inlineCode",{parentName:"h2"},"if-else")),(0,l.kt)("h3",{id:"no-dupe-else-if"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-dupe-else-if"},(0,l.kt)("inlineCode",{parentName:"a"},"no-dupe-else-if"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"It is probably a mistake, or at least extremely confusing, to have the same condition written twice. If each condition leads to a side effect, consider restructuring your code."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," a "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (a"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"++"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// a was originally 3")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (a"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"++"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// a was originally 2")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (a"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"++"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// a was originally 1")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (a"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"++"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// a was originally 3")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (a"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"++"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// a was originally 2")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (a"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"++"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// a was originally 1")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," a "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," hasFound "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"false"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"while"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (a"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"++"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"<="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"&&"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"!"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"hasFound) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (a "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") hasFound "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"true"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," hasFound "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"false"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"while"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (a"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"++"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"<="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"&&"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"!"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"hasFound) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (a "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") hasFound "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"true"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("h3",{id:"no-else-return"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-else-return"},(0,l.kt)("inlineCode",{parentName:"a"},"no-else-return"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Allow ",(0,l.kt)("inlineCode",{parentName:"li"},"else if")," after the previous block ends with ",(0,l.kt)("inlineCode",{parentName:"li"},"return")," (",(0,l.kt)("inlineCode",{parentName:"li"},"allowElseIf: true"),")")))),(0,l.kt)("p",null,"Using ",(0,l.kt)("inlineCode",{parentName:"p"},"return")," at the top level instead of within ",(0,l.kt)("inlineCode",{parentName:"p"},"else")," allows you to write with less indentation. It also prevents accidental unreachable code. ",(0,l.kt)("inlineCode",{parentName:"p"},"else if")," is allowed because it leads to fewer lines compared to two separate ",(0,l.kt)("inlineCode",{parentName:"p"},"if")," statements, and also makes the flow clearer."),(0,l.kt)("h3",{id:"no-lonely-if"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-lonely-if"},(0,l.kt)("inlineCode",{parentName:"a"},"no-lonely-if"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Do not use an ",(0,l.kt)("inlineCode",{parentName:"p"},"if")," statement as the only statement in an ",(0,l.kt)("inlineCode",{parentName:"p"},"else")," block. Use ",(0,l.kt)("inlineCode",{parentName:"p"},"else if")," instead."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (something) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (somethingElse) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (something) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (somethingElse) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("h2",{id:"loops"},"Loops"),(0,l.kt)("h3",{id:"for-direction"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/for-direction"},(0,l.kt)("inlineCode",{parentName:"a"},"for-direction"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"The for loop should always be iterating in the correct direction, which means increment + check for upper bound, or decrement + check for lower bound."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"for"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," i "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"10"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; i "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},">="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; i"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"++"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") console."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(i); "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> 10 11 12 13 ..."))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"for"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," i "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"10"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; i "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},">="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; i"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"++"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") console."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(i); "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> 10 11 12 13 ...")))))),(0,l.kt)("h3",{id:"guard-for-in"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/guard-for-in"},(0,l.kt)("inlineCode",{parentName:"a"},"guard-for-in"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"We ban ",(0,l.kt)("inlineCode",{parentName:"p"},"for...in")," loops altogether via ",(0,l.kt)("inlineCode",{parentName:"p"},"no-restricted-syntax"),". In the rare case where you actually use ",(0,l.kt)("inlineCode",{parentName:"p"},"for...in"),", we assume you know what you are doing and you actually intend to visit the prototype chain."),(0,l.kt)("h3",{id:"no-continue"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-continue"},(0,l.kt)("inlineCode",{parentName:"a"},"no-continue"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"continue")," is a way of early-bailing to avoid creating extra indentation. Instead of this:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"for"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"line"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"of"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," lines) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (line."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"trim"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"()."),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"length"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},">"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// 20 lines of handling this line...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"for"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"line"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"of"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," lines) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (line."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"trim"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"()."),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"length"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},">"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// 20 lines of handling this line...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("p",null,"Prefer this:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"for"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"line"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"of"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," lines) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (line."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"trim"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"()."),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"length"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"continue"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// 20 lines of handling this line...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"for"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"line"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"of"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," lines) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (line."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"trim"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"()."),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"length"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"continue"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// 20 lines of handling this line...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("h3",{id:"no-unmodified-loop-condition"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unmodified-loop-condition"},(0,l.kt)("inlineCode",{parentName:"a"},"no-unmodified-loop-condition"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Unmodified loop conditions are usually a mistake. Note that this rule may have false-positives but the chances are low."),(0,l.kt)("h3",{id:"no-unreachable-loop"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unreachable-loop"},(0,l.kt)("inlineCode",{parentName:"a"},"no-unreachable-loop"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Allow no exceptions (",(0,l.kt)("inlineCode",{parentName:"li"},"ignore: []"),")")))),(0,l.kt)("p",null,"Do not write loops that only run once. Either use an ",(0,l.kt)("inlineCode",{parentName:"p"},"if")," statement instead or put the ",(0,l.kt)("inlineCode",{parentName:"p"},"break")," inside a conditional."),(0,l.kt)("h3",{id:"use-of-for-in"},"Use of ",(0,l.kt)("inlineCode",{parentName:"h3"},"for-in")),(0,l.kt)("p",null,"We ban ",(0,l.kt)("inlineCode",{parentName:"p"},"for...in")," loops altogether via ",(0,l.kt)("inlineCode",{parentName:"p"},"no-restricted-syntax"),". This is because it traverses the prototype chain, which is almost never what you want. Usually, you should refactor ",(0,l.kt)("inlineCode",{parentName:"p"},"for (const key in obj)")," to ",(0,l.kt)("inlineCode",{parentName:"p"},"for (const key of Object.keys(obj))"),", or consider if you meant ",(0,l.kt)("inlineCode",{parentName:"p"},"for-of")," in the first place."),(0,l.kt)("h2",{id:"switch-case"},(0,l.kt)("inlineCode",{parentName:"h2"},"switch-case")),(0,l.kt)("h3",{id:"default-case"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/default-case"},(0,l.kt)("inlineCode",{parentName:"a"},"default-case"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"We do not require a default case, because it is very idiomatic to use ",(0,l.kt)("inlineCode",{parentName:"p"},"switch-case")," when we do know that the value falls within a finite range."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"type"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:'type TreeNode = {\n type: "leaf";\n value: number;\n} | {\n type: "parent";\n children: TreeNode[];\n}'},"TreeNode")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," { "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:'(property) type: "leaf"'},"type")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"leaf"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) value: number"},"value")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," { "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:'(property) type: "parent"'},"type")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"parent"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) children: TreeNode[]"},"children")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:'type TreeNode = {\n type: "leaf";\n value: number;\n} | {\n type: "parent";\n children: TreeNode[];\n}'},"TreeNode")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"[] };")),(0,l.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"function transformNode(node: TreeNode): void"},"transformNode")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) node: TreeNode"},"node")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:'type TreeNode = {\n type: "leaf";\n value: number;\n} | {\n type: "parent";\n children: TreeNode[];\n}'},"TreeNode")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"switch"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) node: TreeNode"},"node"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:'(property) type: "leaf" | "parent"'},"type"),") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"case"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"leaf"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},":")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,l.kt)("data-lsp",{parentName:"span",lsp:'(parameter) node: {\n type: "leaf";\n value: number;\n}'},"node"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) value: number"},"value")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"++"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"break"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"case"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"parent"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},":")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,l.kt)("data-lsp",{parentName:"span",lsp:'(parameter) node: {\n type: "parent";\n children: TreeNode[];\n}'},"node"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) children: TreeNode[]"},"children"),"."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(method) Array.forEach(callbackfn: (value: TreeNode, index: number, array: TreeNode[]) => void, thisArg?: any): void"},"forEach")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,l.kt)("data-lsp",{parentName:"span",lsp:"function transformNode(node: TreeNode): void"},"transformNode"),");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"break"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"default"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},":")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// This will never happen given proper boundary typing and input")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// validation, but results in useless non-test-covered lines. Just omit")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// the default case.")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// @ts-expect-error: should never happen")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"throw"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"var Error: ErrorConstructor\nnew (message?: string | undefined) => Error"},"Error")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"`Bad node type ${"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) node: never"},"node")),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"any"},"type")),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"type"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:'type TreeNode = {\n type: "leaf";\n value: number;\n} | {\n type: "parent";\n children: TreeNode[];\n}'},"TreeNode")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:'(property) type: "leaf"'},"type")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"leaf"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) value: number"},"value")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:'(property) type: "parent"'},"type")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"parent"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) children: TreeNode[]"},"children")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:'type TreeNode = {\n type: "leaf";\n value: number;\n} | {\n type: "parent";\n children: TreeNode[];\n}'},"TreeNode")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[] };")),(0,l.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"function transformNode(node: TreeNode): void"},"transformNode")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) node: TreeNode"},"node")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:'type TreeNode = {\n type: "leaf";\n value: number;\n} | {\n type: "parent";\n children: TreeNode[];\n}'},"TreeNode")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"switch"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) node: TreeNode"},"node"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:'(property) type: "leaf" | "parent"'},"type"),") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"case"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"leaf"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},":")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,l.kt)("data-lsp",{parentName:"span",lsp:'(parameter) node: {\n type: "leaf";\n value: number;\n}'},"node"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) value: number"},"value")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"++"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"break"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"case"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"parent"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},":")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,l.kt)("data-lsp",{parentName:"span",lsp:'(parameter) node: {\n type: "parent";\n children: TreeNode[];\n}'},"node"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) children: TreeNode[]"},"children"),"."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(method) Array.forEach(callbackfn: (value: TreeNode, index: number, array: TreeNode[]) => void, thisArg?: any): void"},"forEach")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,l.kt)("data-lsp",{parentName:"span",lsp:"function transformNode(node: TreeNode): void"},"transformNode"),");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"break"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"default"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},":")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// This will never happen given proper boundary typing and input")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// validation, but results in useless non-test-covered lines. Just omit")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// the default case.")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// @ts-expect-error: should never happen")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"throw"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"var Error: ErrorConstructor\nnew (message?: string | undefined) => Error"},"Error")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`Bad node type ${"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) node: never"},"node")),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"any"},"type")),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("p",null,"More favorably, ",(0,l.kt)("em",{parentName:"p"},"only")," use switch-case if the matched value has a finite range (e.g. a union of literals). If it can be any value, use if-else instead."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"type"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"type Res = {\n code: 200;\n body: string;\n error: never;\n} | {\n code: number;\n error: string;\n body: never;\n}"},"Res")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) code: 200"},"code")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"200"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) body: string"},"body")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) error: never"},"error")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"never"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," { "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) error: string"},"error")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) body: never"},"body")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"never"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," };")),(0,l.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"function handleResponse(res: Res): string"},"handleResponse")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res")),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"type Res = {\n code: 200;\n body: string;\n error: never;\n} | {\n code: number;\n error: string;\n body: never;\n}"},"Res")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"404"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"Not found"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," } "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"500"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"Server error"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," } "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"200"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) body: string"},"body"),";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," } "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"`Unknown response shape: ${"),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"var JSON: JSON"},"JSON")),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(method) JSON.stringify(value: any, replacer?: ((this: any, key: string, value: any) => any) | undefined, space?: string | number | undefined): string (+1 overload)"},"stringify")),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res")),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},")"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"type"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"type Res = {\n code: 200;\n body: string;\n error: never;\n} | {\n code: number;\n error: string;\n body: never;\n}"},"Res")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) code: 200"},"code")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"200"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) body: string"},"body")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) error: never"},"error")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"never"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) error: string"},"error")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) body: never"},"body")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"never"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," };")),(0,l.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"function handleResponse(res: Res): string"},"handleResponse")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res")),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"type Res = {\n code: 200;\n body: string;\n error: never;\n} | {\n code: number;\n error: string;\n body: never;\n}"},"Res")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"404"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"Not found"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," } "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"500"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"Server error"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," } "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) code: number"},"code")," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"200"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res"),".",(0,l.kt)("data-lsp",{parentName:"span",lsp:"(property) body: string"},"body"),";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," } "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"else"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`Unknown response shape: ${"),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"var JSON: JSON"},"JSON")),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(method) JSON.stringify(value: any, replacer?: ((this: any, key: string, value: any) => any) | undefined, space?: string | number | undefined): string (+1 overload)"},"stringify")),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Res"},"res")),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},")"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("p",null,"You may ask, what if the type doesn't reflect the full range of possible runtime input? The answer is, you are missing input validation. Writing incomplete types is going to cause troubles elsewhere, if not here."),(0,l.kt)("h3",{id:"default-case-last"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/default-case-last"},(0,l.kt)("inlineCode",{parentName:"a"},"default-case-last"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"In case where there's indeed a default case, we require it to be placed last. This is because a default case means, well, that all ",(0,l.kt)("em",{parentName:"p"},"previous")," matches have failed. When reading the code, the reader is more interested in what the ",(0,l.kt)("em",{parentName:"p"},"previous")," specified cases are rather than what the fallback behavior is."),(0,l.kt)("h3",{id:"no-case-declarations"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-case-declarations"},(0,l.kt)("inlineCode",{parentName:"a"},"no-case-declarations"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"If a case contains lexical declarations, it must be wrapped in a block. This is because the ",(0,l.kt)("inlineCode",{parentName:"p"},"case")," are more like labels and do not create their own scope. This may lead to unexpected bugs, especially if there's fallthrough."),(0,l.kt)("p",null,"TODO: examples?"),(0,l.kt)("h3",{id:"no-duplicate-case"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-duplicate-case"},(0,l.kt)("inlineCode",{parentName:"a"},"no-duplicate-case"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"See ",(0,l.kt)("a",{parentName:"p",href:"#no-dupe-else-if"},(0,l.kt)("inlineCode",{parentName:"a"},"no-dupe-else-if")),"."),(0,l.kt)("h3",{id:"no-fallthrough"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-fallthrough"},(0,l.kt)("inlineCode",{parentName:"a"},"no-fallthrough"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Allow empty cases to fall through (",(0,l.kt)("inlineCode",{parentName:"li"},"allowEmptyCase: true"),")"),(0,l.kt)("li",{parentName:"ul"},"Do not allow comments (",(0,l.kt)("inlineCode",{parentName:"li"},"commentPattern: undefined"),")")))),(0,l.kt)("p",null,"It is a common error to forget ",(0,l.kt)("inlineCode",{parentName:"p"},"break"),". In cases where you do want to fall through, use a disable comment, which is just as expressive as a custom comment like ",(0,l.kt)("inlineCode",{parentName:"p"},"// fallthrough"),"."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"switch"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (a) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"case"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},":")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// eslint-disable-next-line no-fallthrough")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"case"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},":")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"switch"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (a) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"case"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},":")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// eslint-disable-next-line no-fallthrough")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"case"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},":")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("h2",{id:"try-catch"},(0,l.kt)("inlineCode",{parentName:"h2"},"try-catch")),(0,l.kt)("h3",{id:"no-ex-assign"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-ex-assign"},(0,l.kt)("inlineCode",{parentName:"a"},"no-ex-assign"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"There aren't many good reasons for re-assigning ",(0,l.kt)("inlineCode",{parentName:"p"},"err")," in a ",(0,l.kt)("inlineCode",{parentName:"p"},"catch")," block. In TypeScript, its type is always ",(0,l.kt)("inlineCode",{parentName:"p"},"unknown"),", so even if you normalize its type in value-land, you still have to cast it to a more specific type to use it."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"try"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"catch"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,l.kt)("data-lsp",{parentName:"span",lsp:"var err: unknown"},"err"),") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,l.kt)("data-lsp",{parentName:"span",lsp:"var err: unknown",style:{borderBottom:"solid 2px lightgrey"}},"err")," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"var Error: ErrorConstructor\nnew (message?: string | undefined) => Error"},"Error")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"var String: StringConstructor\n(value?: any) => string"},"String")),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,l.kt)("data-lsp",{parentName:"span",lsp:"var err: unknown",style:{borderBottom:"solid 2px lightgrey"}},"err"),")); "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// err is still unknown")),(0,l.kt)("div",{parentName:"code",className:"meta-line"},(0,l.kt)("span",{parentName:"div",className:"popover-prefix"}," "),(0,l.kt)("span",{parentName:"div",className:"popover"},(0,l.kt)("div",{parentName:"span",className:"arrow"}),"var err: unknown")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"try"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"catch"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,l.kt)("data-lsp",{parentName:"span",lsp:"var err: unknown"},"err"),") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,l.kt)("data-lsp",{parentName:"span",lsp:"var err: unknown",style:{borderBottom:"solid 2px lightgrey"}},"err")," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"var Error: ErrorConstructor\nnew (message?: string | undefined) => Error"},"Error")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,l.kt)("data-lsp",{parentName:"span",lsp:"var String: StringConstructor\n(value?: any) => string"},"String")),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,l.kt)("data-lsp",{parentName:"span",lsp:"var err: unknown",style:{borderBottom:"solid 2px lightgrey"}},"err"),")); "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// err is still unknown")),(0,l.kt)("div",{parentName:"code",className:"meta-line"},(0,l.kt)("span",{parentName:"div",className:"popover-prefix"}," "),(0,l.kt)("span",{parentName:"div",className:"popover"},(0,l.kt)("div",{parentName:"span",className:"arrow"}),"var err: unknown")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("p",null,"Just create a new variable instead."),(0,l.kt)("h3",{id:"no-unsafe-finally"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unsafe-finally"},(0,l.kt)("inlineCode",{parentName:"a"},"no-unsafe-finally"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Do not use control-flow statements (",(0,l.kt)("inlineCode",{parentName:"p"},"return")," or ",(0,l.kt)("inlineCode",{parentName:"p"},"throw")," in particular) in a ",(0,l.kt)("inlineCode",{parentName:"p"},"finally")," block. This overwrites the completion value of the ",(0,l.kt)("inlineCode",{parentName:"p"},"try")," block."),(0,l.kt)("p",null,"Note that errors may still be thrown from the ",(0,l.kt)("inlineCode",{parentName:"p"},"finally")," block but the possibility is low. When this happens, it usually means something very bad had happened and is not up to the developer to handle anyway."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"try"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"finally"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"closeFile"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(); "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// May still throw if the file fails to close")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"try"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"finally"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"closeFile"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(); "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// May still throw if the file fails to close")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("h3",{id:"no-useless-catch"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-catch"},(0,l.kt)("inlineCode",{parentName:"a"},"no-useless-catch"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Do not use ",(0,l.kt)("inlineCode",{parentName:"p"},"try-catch")," blocks that only re-throw the caught error. This is a sign of refactoring artifacts."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"try"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"catch"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (e) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Maybe you intend to have some additional handling here?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"throw"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," e;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"try"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"} "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"catch"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (e) {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Maybe you intend to have some additional handling here?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"throw"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," e;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("h2",{id:"labels"},"Labels"),(0,l.kt)("h3",{id:"no-extra-label"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-extra-label"},(0,l.kt)("inlineCode",{parentName:"a"},"no-extra-label"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Only use a label when it can break out of nested loops. Do not use labels if the ",(0,l.kt)("inlineCode",{parentName:"p"},"break"),"/",(0,l.kt)("inlineCode",{parentName:"p"},"continue")," functions correctly without them."),(0,l.kt)("h3",{id:"no-label-var"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-label-var"},(0,l.kt)("inlineCode",{parentName:"a"},"no-label-var"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Do not give a label the same name as a variable. This is potentially confusing."),(0,l.kt)("h3",{id:"no-labels"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-labels"},(0,l.kt)("inlineCode",{parentName:"a"},"no-labels"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"We allow labels. They are useful for breaking out of nested loops. However, we ban unnecessary labels with ",(0,l.kt)("inlineCode",{parentName:"p"},"no-extra-label")," and unused labels with ",(0,l.kt)("inlineCode",{parentName:"p"},"no-unused-labels"),", which should eliminate most of the problems with accidental labels."),(0,l.kt)("h3",{id:"no-unused-labels"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unused-labels"},(0,l.kt)("inlineCode",{parentName:"a"},"no-unused-labels"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ts(7028): Unused label."))))),(0,l.kt)("p",null,"Do not declare labels that are not used. This is the same mistake as declaring unused variables, and is potentially worse because labels are very rare, and unused labels are usually signs of miswritten code, such as ",(0,l.kt)("inlineCode",{parentName:"p"},"() => { a: 1 }")," where ",(0,l.kt)("inlineCode",{parentName:"p"},"a")," is parsed as a label."),(0,l.kt)("h2",{id:"other-statements"},"Other statements"),(0,l.kt)("h3",{id:"no-debugger"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-debugger"},(0,l.kt)("inlineCode",{parentName:"a"},"no-debugger"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"You should never have ",(0,l.kt)("inlineCode",{parentName:"p"},"debugger")," statements in production code."),(0,l.kt)("h3",{id:"no-throw-literal"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-throw-literal"},(0,l.kt)("inlineCode",{parentName:"a"},"no-throw-literal"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"You should always throw one of the following:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Newly created ",(0,l.kt)("inlineCode",{parentName:"li"},"Error")," instances"),(0,l.kt)("li",{parentName:"ol"},"In the case of re-throwing: the caught error"),(0,l.kt)("li",{parentName:"ol"},"In the case of an API returning an error wrapped in a result: the expression representing that error (usually ",(0,l.kt)("inlineCode",{parentName:"li"},"result.error"),", etc.)")),(0,l.kt)("p",null,"Throwing a string literal is never allowed because it doesn't contain the stack trace and other APIs expecting ",(0,l.kt)("inlineCode",{parentName:"p"},"Error")," instances may not function correctly. There are some API designs that require using ",(0,l.kt)("inlineCode",{parentName:"p"},"throw")," (like ",(0,l.kt)("inlineCode",{parentName:"p"},"throw redirect(301)"),") but such cases are extremely rare."),(0,l.kt)("h3",{id:"no-unreachable"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unreachable"},(0,l.kt)("inlineCode",{parentName:"a"},"no-unreachable"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ts(7027): Unreachable code detected."))))),(0,l.kt)("p",null,"Unreachable code is always a mistake. Furthermore, TypeScript gives up on control-flow analysis inside unreachable code, so you may get type errors that are not real."),(0,l.kt)("h3",{id:"no-unused-expressions"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unused-expressions"},(0,l.kt)("inlineCode",{parentName:"a"},"no-unused-expressions"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Allow short-circuiting operators (",(0,l.kt)("inlineCode",{parentName:"li"},"allowShortCircuit: true"),")"),(0,l.kt)("li",{parentName:"ul"},"Allow ternary expressions (",(0,l.kt)("inlineCode",{parentName:"li"},"allowTernary: true"),")"),(0,l.kt)("li",{parentName:"ul"},"Allow tagged templates (",(0,l.kt)("inlineCode",{parentName:"li"},"allowTaggedTemplates: true"),")"),(0,l.kt)("li",{parentName:"ul"},"Disallow unused JSX expressions (",(0,l.kt)("inlineCode",{parentName:"li"},"enforceForJSX: true"),")"))),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/js-style-guide/typescript/base#no-unused-expressions"},(0,l.kt)("inlineCode",{parentName:"a"},"@typescript-eslint/no-unused-expressions")))))),(0,l.kt)("p",null,"Every expression statement must have some side-effect. We allow only the following expressions as statements:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Assignments"),(0,l.kt)("li",{parentName:"ul"},"Calls (including ",(0,l.kt)("inlineCode",{parentName:"li"},"new"),", tagged templates, and ",(0,l.kt)("inlineCode",{parentName:"li"},"import()"),")"),(0,l.kt)("li",{parentName:"ul"},"Logical operators (",(0,l.kt)("inlineCode",{parentName:"li"},"&&"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"||"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"??"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"? :"),") to substitute for control-flow statements like ",(0,l.kt)("inlineCode",{parentName:"li"},"if...else"))),(0,l.kt)("h3",{id:"no-with"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-with"},(0,l.kt)("inlineCode",{parentName:"a"},"no-with"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ts(1101): 'with' statements are not allowed in strict mode."))))),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"with")," is forbidden in strict mode. It is also forbidden in TypeScript and causes TypeScript to give up on any type checking."),(0,l.kt)("h2",{id:"complexity"},"Complexity"),(0,l.kt)("p",null,"We don't think there's a single good metric of code complexity. We optimize for readability instead, and sometimes workarounds to \"high complexity\" code actually reduces readability by fragments the code into chunks that are hard to trace. Therefore, most of the rules aiming to limit complexity are disabled."),(0,l.kt)("h3",{id:"complexity-1"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/complexity"},(0,l.kt)("inlineCode",{parentName:"a"},"complexity"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("h3",{id:"max-depth"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-depth"},(0,l.kt)("inlineCode",{parentName:"a"},"max-depth"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("h3",{id:"max-lines"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-lines"},(0,l.kt)("inlineCode",{parentName:"a"},"max-lines"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("h3",{id:"max-statements"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-statements"},(0,l.kt)("inlineCode",{parentName:"a"},"max-statements"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")))}m.isMDXComponent=!0},5318:(e,a,t)=>{t.d(a,{Zo:()=>d,kt:()=>k});var n=t(7378);function l(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function s(e){for(var a=1;a=0||(l[t]=e[t]);return l}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var p=n.createContext({}),i=function(e){var a=n.useContext(p),t=a;return e&&(t="function"==typeof e?e(a):s(s({},a),e)),t},d=function(e){var a=i(e.components);return n.createElement(p.Provider,{value:a},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},N=n.forwardRef((function(e,a){var t=e.components,l=e.mdxType,r=e.originalType,p=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),c=i(t),N=l,k=c["".concat(p,".").concat(N)]||c[N]||m[N]||r;return t?n.createElement(k,s(s({ref:a},d),{},{components:t})):n.createElement(k,s({ref:a},d))}));function k(e,a){var t=arguments,l=a&&a.mdxType;if("string"==typeof e||l){var r=t.length,s=new Array(r);s[0]=N;var o={};for(var p in a)hasOwnProperty.call(a,p)&&(o[p]=a[p]);o.originalType=e,o[c]="string"==typeof e?e:l,s[1]=o;for(var i=2;i{n.r(t),n.d(t,{default:()=>i});var a=n(3696),l=n(6590),o=n(5605),r=n(6436);function i(){return a.createElement(a.Fragment,null,a.createElement(o.be,{title:(0,l.T)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.A,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.A,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.65247dfd.js b/assets/js/935f2afb.65247dfd.js deleted file mode 100644 index b52fe77..0000000 --- a/assets/js/935f2afb.65247dfd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"defaultSidebar":[{"type":"link","label":"Guide","href":"/js-style-guide/","docId":"guide"},{"type":"category","label":"Base rules","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"General formatting","href":"/js-style-guide/eslint-base/formatting","docId":"eslint-base/formatting"},{"type":"link","label":"Literals","href":"/js-style-guide/eslint-base/literals","docId":"eslint-base/literals"},{"type":"link","label":"Variables & names","href":"/js-style-guide/eslint-base/variables-names","docId":"eslint-base/variables-names"},{"type":"link","label":"Operators","href":"/js-style-guide/eslint-base/operators","docId":"eslint-base/operators"},{"type":"link","label":"Control flow","href":"/js-style-guide/eslint-base/control-flow","docId":"eslint-base/control-flow"},{"type":"link","label":"Functions","href":"/js-style-guide/eslint-base/functions","docId":"eslint-base/functions"},{"type":"link","label":"Objects & classes","href":"/js-style-guide/eslint-base/objects-classes","docId":"eslint-base/objects-classes"},{"type":"link","label":"Collections","href":"/js-style-guide/eslint-base/collections","docId":"eslint-base/collections"},{"type":"link","label":"Async operations","href":"/js-style-guide/eslint-base/async","docId":"eslint-base/async"},{"type":"link","label":"Modules","href":"/js-style-guide/eslint-base/modules","docId":"eslint-base/modules"}],"href":"/js-style-guide/eslint-base/"},{"type":"category","label":"typescript-eslint rules","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"TypeScript","href":"/js-style-guide/typescript/base","docId":"typescript/base"},{"type":"link","label":"Type-checked ESLint rules","href":"/js-style-guide/typescript/type-checked","docId":"typescript/type-checked"}],"href":"/js-style-guide/typescript/"}]},"docs":{"eslint-base/async":{"id":"eslint-base/async","title":"Async operations","description":"This page discusses best practices for writing promises and async/await and managing async operations.","sidebar":"defaultSidebar"},"eslint-base/collections":{"id":"eslint-base/collections","title":"Collections","description":"This page introduces rules related to arrays and other structures.","sidebar":"defaultSidebar"},"eslint-base/control-flow":{"id":"eslint-base/control-flow","title":"Control flow","description":"This page introduces styles for all statements, such as if-else, loops, conditions, and general authoring of control flow.","sidebar":"defaultSidebar"},"eslint-base/formatting":{"id":"eslint-base/formatting","title":"General formatting","description":"Code formatting is completely Prettier-powered. Some Prettier configuration options that can be contended are explained below. We only use ESLint to enforce some formatting rules that Prettier cannot handle, mostly around curly braces and comments.","sidebar":"defaultSidebar"},"eslint-base/functions":{"id":"eslint-base/functions","title":"Functions","description":"This page concerns styles for authoring functions, including the syntax for function declarations, arrow functions, and methods.","sidebar":"defaultSidebar"},"eslint-base/index":{"id":"eslint-base/index","title":"Base rules","description":"This page introduces some general rules for JavaScript programming. Most of these are enforced by ESLint core rules.","sidebar":"defaultSidebar"},"eslint-base/literals":{"id":"eslint-base/literals","title":"Literals","description":"This page discusses styles for number, string, and regex literals, as well as template/symbol expressions.","sidebar":"defaultSidebar"},"eslint-base/modules":{"id":"eslint-base/modules","title":"Modules","description":"This page introduces rules related to modules, such as import/exports.","sidebar":"defaultSidebar"},"eslint-base/objects-classes":{"id":"eslint-base/objects-classes","title":"Objects & classes","description":"This page introduces rules related to declaring objects and classes. It does not discuss about using them.","sidebar":"defaultSidebar"},"eslint-base/operators":{"id":"eslint-base/operators","title":"Operators","description":"This page discusses styles for all operators, including arithmetic, comparison, assignment, and other operators.","sidebar":"defaultSidebar"},"eslint-base/variables-names":{"id":"eslint-base/variables-names","title":"Variables & names","description":"This page discusses rules around variable declaration, use of properties, and naming.","sidebar":"defaultSidebar"},"guide":{"id":"guide","title":"Guide","description":"This page gets you started with JC-verse\'s JS style guide. The JS style guide is enforced through a set of toolings:","sidebar":"defaultSidebar"},"typescript/base":{"id":"typescript/base","title":"TypeScript","description":"Types","sidebar":"defaultSidebar"},"typescript/index":{"id":"typescript/index","title":"typescript-eslint rules","description":"This page introduces rules from the typescript-eslint plugin.","sidebar":"defaultSidebar"},"typescript/type-checked":{"id":"typescript/type-checked","title":"Type-checked ESLint rules","description":"Operators","sidebar":"defaultSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.8e29971d.js b/assets/js/935f2afb.8e29971d.js new file mode 100644 index 0000000..f23ae0f --- /dev/null +++ b/assets/js/935f2afb.8e29971d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"defaultSidebar":[{"type":"link","label":"Guide","href":"/js-style-guide/","docId":"guide"},{"type":"category","label":"Base rules","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"General formatting","href":"/js-style-guide/eslint-base/formatting","docId":"eslint-base/formatting"},{"type":"link","label":"Literals","href":"/js-style-guide/eslint-base/literals","docId":"eslint-base/literals"},{"type":"link","label":"Variables & names","href":"/js-style-guide/eslint-base/variables-names","docId":"eslint-base/variables-names"},{"type":"link","label":"Operators","href":"/js-style-guide/eslint-base/operators","docId":"eslint-base/operators"},{"type":"link","label":"Control flow","href":"/js-style-guide/eslint-base/control-flow","docId":"eslint-base/control-flow"},{"type":"link","label":"Functions","href":"/js-style-guide/eslint-base/functions","docId":"eslint-base/functions"},{"type":"link","label":"Objects & classes","href":"/js-style-guide/eslint-base/objects-classes","docId":"eslint-base/objects-classes"},{"type":"link","label":"Collections","href":"/js-style-guide/eslint-base/collections","docId":"eslint-base/collections"},{"type":"link","label":"Async operations","href":"/js-style-guide/eslint-base/async","docId":"eslint-base/async"},{"type":"link","label":"Modules","href":"/js-style-guide/eslint-base/modules","docId":"eslint-base/modules"}],"href":"/js-style-guide/eslint-base/"},{"type":"category","label":"typescript-eslint rules","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"TypeScript","href":"/js-style-guide/typescript/base","docId":"typescript/base"},{"type":"link","label":"Type-checked ESLint rules","href":"/js-style-guide/typescript/type-checked","docId":"typescript/type-checked"}],"href":"/js-style-guide/typescript/"}]},"docs":{"eslint-base/async":{"id":"eslint-base/async","title":"Async operations","description":"This page discusses best practices for writing promises and async/await and managing async operations.","sidebar":"defaultSidebar"},"eslint-base/collections":{"id":"eslint-base/collections","title":"Collections","description":"This page introduces rules related to arrays and other structures.","sidebar":"defaultSidebar"},"eslint-base/control-flow":{"id":"eslint-base/control-flow","title":"Control flow","description":"This page introduces styles for all statements, such as if-else, loops, conditions, and general authoring of control flow.","sidebar":"defaultSidebar"},"eslint-base/formatting":{"id":"eslint-base/formatting","title":"General formatting","description":"Code formatting is completely Prettier-powered. Some Prettier configuration options that can be contended are explained below. We only use ESLint to enforce some formatting rules that Prettier cannot handle, mostly around curly braces and comments.","sidebar":"defaultSidebar"},"eslint-base/functions":{"id":"eslint-base/functions","title":"Functions","description":"This page concerns styles for authoring functions, including the syntax for function declarations, arrow functions, and methods.","sidebar":"defaultSidebar"},"eslint-base/index":{"id":"eslint-base/index","title":"Base rules","description":"This page introduces some general rules for JavaScript programming. Most of these are enforced by ESLint core rules.","sidebar":"defaultSidebar"},"eslint-base/literals":{"id":"eslint-base/literals","title":"Literals","description":"This page discusses styles for number, string, and regex literals, as well as template/symbol expressions.","sidebar":"defaultSidebar"},"eslint-base/modules":{"id":"eslint-base/modules","title":"Modules","description":"This page introduces rules related to modules, such as import/exports.","sidebar":"defaultSidebar"},"eslint-base/objects-classes":{"id":"eslint-base/objects-classes","title":"Objects & classes","description":"This page introduces rules related to declaring objects and classes. It does not discuss about using them.","sidebar":"defaultSidebar"},"eslint-base/operators":{"id":"eslint-base/operators","title":"Operators","description":"This page discusses styles for all operators, including arithmetic, comparison, assignment, and other operators.","sidebar":"defaultSidebar"},"eslint-base/variables-names":{"id":"eslint-base/variables-names","title":"Variables & names","description":"This page discusses rules around variable declaration, use of properties, and naming.","sidebar":"defaultSidebar"},"guide":{"id":"guide","title":"Guide","description":"This page gets you started with JC-verse\'s JS style guide. The JS style guide is enforced through a set of toolings:","sidebar":"defaultSidebar"},"typescript/base":{"id":"typescript/base","title":"TypeScript","description":"Types","sidebar":"defaultSidebar"},"typescript/index":{"id":"typescript/index","title":"typescript-eslint rules","description":"This page introduces rules from the typescript-eslint plugin.","sidebar":"defaultSidebar"},"typescript/type-checked":{"id":"typescript/type-checked","title":"Type-checked ESLint rules","description":"Operators","sidebar":"defaultSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/b7550edf.5eaaa9c7.js b/assets/js/b7550edf.5eaaa9c7.js new file mode 100644 index 0000000..58f0539 --- /dev/null +++ b/assets/js/b7550edf.5eaaa9c7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[979],{9916:(e,t,r)=>{r.d(t,{xA:()=>p,yg:()=>m});var n=r(3696);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var a=n.createContext({}),u=function(e){var t=n.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(a.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},y=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,a=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(r),y=o,m=c["".concat(a,".").concat(y)]||c[y]||d[y]||i;return r?n.createElement(m,s(s({ref:t},p),{},{components:r})):n.createElement(m,s({ref:t},p))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,s=new Array(i);s[0]=y;var l={};for(var a in t)hasOwnProperty.call(t,a)&&(l[a]=t[a]);l.originalType=e,l[c]="string"==typeof e?e:o,s[1]=l;for(var u=2;u{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var n=r(8102),o=(r(3696),r(9916));const i={sidebar_position:10},s="Modules",l={unversionedId:"eslint-base/modules",id:"eslint-base/modules",title:"Modules",description:"This page introduces rules related to modules, such as import/exports.",source:"@site/../docs/eslint-base/modules.md",sourceDirName:"eslint-base",slug:"/eslint-base/modules",permalink:"/js-style-guide/eslint-base/modules",draft:!1,tags:[],version:"current",sidebarPosition:10,frontMatter:{sidebar_position:10},sidebar:"defaultSidebar",previous:{title:"Async operations",permalink:"/js-style-guide/eslint-base/async"},next:{title:"typescript-eslint rules",permalink:"/js-style-guide/typescript/"}},a={},u=[{value:"Module names",id:"module-names",level:2},{value:"Imports",id:"imports",level:2},{value:"no-import-assign",id:"no-import-assign",level:3},{value:"no-restricted-imports",id:"no-restricted-imports",level:3},{value:"Exports",id:"exports",level:2},{value:"no-restricted-exports",id:"no-restricted-exports",level:3},{value:"Use of export *",id:"use-of-export-",level:3},{value:"Strict mode",id:"strict-mode",level:2},{value:"strict",id:"strict",level:3}],p={toc:u},c="wrapper";function d(e){let{components:t,...r}=e;return(0,o.yg)(c,(0,n.A)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.yg)("h1",{id:"modules"},"Modules"),(0,o.yg)("p",null,"This page introduces rules related to modules, such as import/exports."),(0,o.yg)("h2",{id:"module-names"},"Module names"),(0,o.yg)("h2",{id:"imports"},"Imports"),(0,o.yg)("h3",{id:"no-import-assign"},(0,o.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-import-assign"},(0,o.yg)("inlineCode",{parentName:"a"},"no-import-assign"))),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"Severity: error")),(0,o.yg)("p",null,"Do not assign to imports. This is an error because imported bindings are readonly."),(0,o.yg)("h3",{id:"no-restricted-imports"},(0,o.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-restricted-imports"},(0,o.yg)("inlineCode",{parentName:"a"},"no-restricted-imports"))),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"Severity: can be enabled")),(0,o.yg)("p",null,"You may want to configure this yourself if you want to ban certain identifiers or certain modules. A typical use case is to restrict the use of ",(0,o.yg)("inlineCode",{parentName:"p"},"lodash")," in favor of native operations."),(0,o.yg)("h2",{id:"exports"},"Exports"),(0,o.yg)("h3",{id:"no-restricted-exports"},(0,o.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-restricted-exports"},(0,o.yg)("inlineCode",{parentName:"a"},"no-restricted-exports"))),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"Severity: can be enabled")),(0,o.yg)("p",null,"You may want to configure this yourself if you want to ban certain identifiers."),(0,o.yg)("h3",{id:"use-of-export-"},"Use of ",(0,o.yg)("inlineCode",{parentName:"h3"},"export *")),(0,o.yg)("p",null,"We ban the use of wildcard exports. This is because"),(0,o.yg)("h2",{id:"strict-mode"},"Strict mode"),(0,o.yg)("h3",{id:"strict"},(0,o.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/strict"},(0,o.yg)("inlineCode",{parentName:"a"},"strict"))),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"Severity: error"),(0,o.yg)("li",{parentName:"ul"},"Configuration:",(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},"Require strict mode (",(0,o.yg)("inlineCode",{parentName:"li"},'"global"'),")")))),(0,o.yg)("p",null,"All files should be in strict mode. They should probably also be modules."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b7550edf.b6242072.js b/assets/js/b7550edf.b6242072.js deleted file mode 100644 index c16f9d5..0000000 --- a/assets/js/b7550edf.b6242072.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[904],{5844:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var n=r(2685),o=(r(7378),r(5318));const i={sidebar_position:10},s="Modules",l={unversionedId:"eslint-base/modules",id:"eslint-base/modules",title:"Modules",description:"This page introduces rules related to modules, such as import/exports.",source:"@site/../docs/eslint-base/modules.md",sourceDirName:"eslint-base",slug:"/eslint-base/modules",permalink:"/js-style-guide/eslint-base/modules",draft:!1,tags:[],version:"current",sidebarPosition:10,frontMatter:{sidebar_position:10},sidebar:"defaultSidebar",previous:{title:"Async operations",permalink:"/js-style-guide/eslint-base/async"},next:{title:"typescript-eslint rules",permalink:"/js-style-guide/typescript/"}},a={},u=[{value:"Module names",id:"module-names",level:2},{value:"Imports",id:"imports",level:2},{value:"no-import-assign",id:"no-import-assign",level:3},{value:"no-restricted-imports",id:"no-restricted-imports",level:3},{value:"Exports",id:"exports",level:2},{value:"no-restricted-exports",id:"no-restricted-exports",level:3},{value:"Use of export *",id:"use-of-export-",level:3},{value:"Strict mode",id:"strict-mode",level:2},{value:"strict",id:"strict",level:3}],p={toc:u},c="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"modules"},"Modules"),(0,o.kt)("p",null,"This page introduces rules related to modules, such as import/exports."),(0,o.kt)("h2",{id:"module-names"},"Module names"),(0,o.kt)("h2",{id:"imports"},"Imports"),(0,o.kt)("h3",{id:"no-import-assign"},(0,o.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-import-assign"},(0,o.kt)("inlineCode",{parentName:"a"},"no-import-assign"))),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Severity: error")),(0,o.kt)("p",null,"Do not assign to imports. This is an error because imported bindings are readonly."),(0,o.kt)("h3",{id:"no-restricted-imports"},(0,o.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-restricted-imports"},(0,o.kt)("inlineCode",{parentName:"a"},"no-restricted-imports"))),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Severity: can be enabled")),(0,o.kt)("p",null,"You may want to configure this yourself if you want to ban certain identifiers or certain modules. A typical use case is to restrict the use of ",(0,o.kt)("inlineCode",{parentName:"p"},"lodash")," in favor of native operations."),(0,o.kt)("h2",{id:"exports"},"Exports"),(0,o.kt)("h3",{id:"no-restricted-exports"},(0,o.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-restricted-exports"},(0,o.kt)("inlineCode",{parentName:"a"},"no-restricted-exports"))),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Severity: can be enabled")),(0,o.kt)("p",null,"You may want to configure this yourself if you want to ban certain identifiers."),(0,o.kt)("h3",{id:"use-of-export-"},"Use of ",(0,o.kt)("inlineCode",{parentName:"h3"},"export *")),(0,o.kt)("p",null,"We ban the use of wildcard exports. This is because"),(0,o.kt)("h2",{id:"strict-mode"},"Strict mode"),(0,o.kt)("h3",{id:"strict"},(0,o.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/strict"},(0,o.kt)("inlineCode",{parentName:"a"},"strict"))),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Severity: error"),(0,o.kt)("li",{parentName:"ul"},"Configuration:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Require strict mode (",(0,o.kt)("inlineCode",{parentName:"li"},'"global"'),")")))),(0,o.kt)("p",null,"All files should be in strict mode. They should probably also be modules."))}d.isMDXComponent=!0},5318:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var a=n.createContext({}),u=function(e){var t=n.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(a.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,a=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(r),m=o,f=c["".concat(a,".").concat(m)]||c[m]||d[m]||i;return r?n.createElement(f,s(s({ref:t},p),{},{components:r})):n.createElement(f,s({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,s=new Array(i);s[0]=m;var l={};for(var a in t)hasOwnProperty.call(t,a)&&(l[a]=t[a]);l.originalType=e,l[c]="string"==typeof e?e:o,s[1]=l;for(var u=2;u{r.d(t,{Z:()=>b});var n=r(7378),i=r(8944),a=r(7470),o=r(1191),c=r(4715),s=r(7419);const l={cardContainer:"cardContainer_H47c",cardTitle:"cardTitle_tTnA",cardDescription:"cardDescription_rTl4"};function u(e){let{href:t,children:r}=e;return n.createElement(o.Z,{href:t,className:(0,i.Z)("card padding--lg",l.cardContainer)},r)}function m(e){let{href:t,icon:r,title:a,description:o}=e;return n.createElement(u,{href:t},n.createElement("h2",{className:(0,i.Z)("text--truncate",l.cardTitle),title:a},r," ",a),o&&n.createElement("p",{className:(0,i.Z)("text--truncate",l.cardDescription),title:o},o))}function p(e){let{item:t}=e;const r=(0,a.Wl)(t);return r?n.createElement(m,{href:r,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:(0,s.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function d(e){let{item:t}=e;const r=(0,c.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",i=(0,a.xz)(t.docId??void 0);return n.createElement(m,{href:t.href,icon:r,title:t.label,description:i?.description})}function f(e){let{item:t}=e;switch(t.type){case"link":return n.createElement(d,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function y(e){let{className:t}=e;const r=(0,a.jA)();return n.createElement(b,{items:r.items,className:t})}function b(e){const{items:t,className:r}=e;if(!t)return n.createElement(y,e);const o=(0,a.MN)(t);return n.createElement("section",{className:(0,i.Z)("row",r)},o.map(((e,t)=>n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e})))))}},3417:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var n=r(2685),i=(r(7378),r(5318)),a=r(3818);const o={sidebar_position:2},c="Base rules",s={unversionedId:"eslint-base/index",id:"eslint-base/index",title:"Base rules",description:"This page introduces some general rules for JavaScript programming. Most of these are enforced by ESLint core rules.",source:"@site/../docs/eslint-base/index.md",sourceDirName:"eslint-base",slug:"/eslint-base/",permalink:"/js-style-guide/eslint-base/",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"defaultSidebar",previous:{title:"Guide",permalink:"/js-style-guide/"},next:{title:"General formatting",permalink:"/js-style-guide/eslint-base/formatting"}},l={},u=[],m={toc:u},p="wrapper";function d(e){let{components:t,...r}=e;return(0,i.kt)(p,(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"base-rules"},"Base rules"),(0,i.kt)("p",null,"This page introduces some general rules for JavaScript programming. Most of these are enforced by ESLint core rules."),(0,i.kt)(a.Z,{mdxType:"DocCardList"}))}d.isMDXComponent=!0},5318:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7378);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),m=l(r),d=i,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||a;return r?n.createElement(f,o(o({ref:t},u),{},{components:r})):n.createElement(f,o({ref:t},u))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,o=new Array(a);o[0]=d;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[m]="string"==typeof e?e:i,o[1]=c;for(var l=2;l{r.d(t,{xA:()=>u,yg:()=>f});var n=r(3696);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),m=l(r),d=i,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||a;return r?n.createElement(f,o(o({ref:t},u),{},{components:r})):n.createElement(f,o({ref:t},u))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,o=new Array(a);o[0]=d;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[m]="string"==typeof e?e:i,o[1]=c;for(var l=2;l{r.d(t,{A:()=>g});var n=r(3696),i=r(8017),a=r(8600),o=r(1611),c=r(2616),s=r(6590);const l={cardContainer:"cardContainer_H47c",cardTitle:"cardTitle_tTnA",cardDescription:"cardDescription_rTl4"};function u(e){let{href:t,children:r}=e;return n.createElement(o.A,{href:t,className:(0,i.A)("card padding--lg",l.cardContainer)},r)}function m(e){let{href:t,icon:r,title:a,description:o}=e;return n.createElement(u,{href:t},n.createElement("h2",{className:(0,i.A)("text--truncate",l.cardTitle),title:a},r," ",a),o&&n.createElement("p",{className:(0,i.A)("text--truncate",l.cardDescription),title:o},o))}function p(e){let{item:t}=e;const r=(0,a._o)(t);return r?n.createElement(m,{href:r,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:(0,s.T)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function d(e){let{item:t}=e;const r=(0,c.A)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",i=(0,a.cC)(t.docId??void 0);return n.createElement(m,{href:t.href,icon:r,title:t.label,description:i?.description})}function f(e){let{item:t}=e;switch(t.type){case"link":return n.createElement(d,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function y(e){let{className:t}=e;const r=(0,a.$S)();return n.createElement(g,{items:r.items,className:t})}function g(e){const{items:t,className:r}=e;if(!t)return n.createElement(y,e);const o=(0,a.d1)(t);return n.createElement("section",{className:(0,i.A)("row",r)},o.map(((e,t)=>n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e})))))}},7716:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var n=r(8102),i=(r(3696),r(9916)),a=r(3480);const o={sidebar_position:2},c="Base rules",s={unversionedId:"eslint-base/index",id:"eslint-base/index",title:"Base rules",description:"This page introduces some general rules for JavaScript programming. Most of these are enforced by ESLint core rules.",source:"@site/../docs/eslint-base/index.md",sourceDirName:"eslint-base",slug:"/eslint-base/",permalink:"/js-style-guide/eslint-base/",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"defaultSidebar",previous:{title:"Guide",permalink:"/js-style-guide/"},next:{title:"General formatting",permalink:"/js-style-guide/eslint-base/formatting"}},l={},u=[],m={toc:u},p="wrapper";function d(e){let{components:t,...r}=e;return(0,i.yg)(p,(0,n.A)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,i.yg)("h1",{id:"base-rules"},"Base rules"),(0,i.yg)("p",null,"This page introduces some general rules for JavaScript programming. Most of these are enforced by ESLint core rules."),(0,i.yg)(a.A,{mdxType:"DocCardList"}))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ce13fc4a.1c5579d8.js b/assets/js/ce13fc4a.1c5579d8.js new file mode 100644 index 0000000..1de9228 --- /dev/null +++ b/assets/js/ce13fc4a.1c5579d8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[215],{9916:(e,a,n)=>{n.d(a,{xA:()=>y,yg:()=>c});var t=n(3696);function r(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function s(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}function l(e){for(var a=1;a=0||(r[n]=e[n]);return r}(e,a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=t.createContext({}),p=function(e){var a=t.useContext(i),n=a;return e&&(n="function"==typeof e?e(a):l(l({},a),e)),n},y=function(e){var a=p(e.components);return t.createElement(i.Provider,{value:a},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},g=t.forwardRef((function(e,a){var n=e.components,r=e.mdxType,s=e.originalType,i=e.parentName,y=o(e,["components","mdxType","originalType","parentName"]),d=p(n),g=r,c=d["".concat(i,".").concat(g)]||d[g]||m[g]||s;return n?t.createElement(c,l(l({ref:a},y),{},{components:n})):t.createElement(c,l({ref:a},y))}));function c(e,a){var n=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var s=n.length,l=new Array(s);l[0]=g;var o={};for(var i in a)hasOwnProperty.call(a,i)&&(o[i]=a[i]);o.originalType=e,o[d]="string"==typeof e?e:r,l[1]=o;for(var p=2;p{n.r(a),n.d(a,{assets:()=>i,contentTitle:()=>l,default:()=>m,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var t=n(8102),r=(n(3696),n(9916));const s={sidebar_position:4},l="Operators",o={unversionedId:"eslint-base/operators",id:"eslint-base/operators",title:"Operators",description:"This page discusses styles for all operators, including arithmetic, comparison, assignment, and other operators.",source:"@site/../docs/eslint-base/operators.md",sourceDirName:"eslint-base",slug:"/eslint-base/operators",permalink:"/js-style-guide/eslint-base/operators",draft:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"defaultSidebar",previous:{title:"Variables & names",permalink:"/js-style-guide/eslint-base/variables-names"},next:{title:"Control flow",permalink:"/js-style-guide/eslint-base/control-flow"}},i={},p=[{value:"Arithmetics",id:"arithmetics",level:2},{value:"no-bitwise",id:"no-bitwise",level:3},{value:"prefer-exponentiation-operator",id:"prefer-exponentiation-operator",level:3},{value:"Comparisons",id:"comparisons",level:2},{value:"eqeqeq",id:"eqeqeq",level:3},{value:"no-compare-neg-zero",id:"no-compare-neg-zero",level:3},{value:"no-eq-null",id:"no-eq-null",level:3},{value:"no-self-compare",id:"no-self-compare",level:3},{value:"use-isnan",id:"use-isnan",level:3},{value:"yoda",id:"yoda",level:3},{value:"Objects",id:"objects",level:2},{value:"dot-notation",id:"dot-notation",level:3},{value:"new-cap",id:"new-cap",level:3},{value:"no-delete-var",id:"no-delete-var",level:3},{value:"no-new",id:"no-new",level:3},{value:"no-unsafe-optional-chaining",id:"no-unsafe-optional-chaining",level:3},{value:"Use of in",id:"use-of-in",level:3},{value:"Boolean logic",id:"boolean-logic",level:2},{value:"no-constant-binary-expression",id:"no-constant-binary-expression",level:3},{value:"no-extra-boolean-cast",id:"no-extra-boolean-cast",level:3},{value:"no-nested-ternary",id:"no-nested-ternary",level:3},{value:"no-ternary",id:"no-ternary",level:3},{value:"no-unneeded-ternary",id:"no-unneeded-ternary",level:3},{value:"no-unsafe-negation",id:"no-unsafe-negation",level:3},{value:"Assignment",id:"assignment",level:2},{value:"logical-assignment-operators",id:"logical-assignment-operators",level:3},{value:"no-cond-assign",id:"no-cond-assign",level:3},{value:"no-multi-assign",id:"no-multi-assign",level:3},{value:"no-plusplus",id:"no-plusplus",level:3},{value:"no-return-assign",id:"no-return-assign",level:3},{value:"no-self-assign",id:"no-self-assign",level:3},{value:"operator-assignment",id:"operator-assignment",level:3},{value:"Others",id:"others",level:2},{value:"no-implicit-coercion",id:"no-implicit-coercion",level:3},{value:"no-sequences",id:"no-sequences",level:3},{value:"no-void",id:"no-void",level:3},{value:"valid-typeof",id:"valid-typeof",level:3}],y={toc:p},d="wrapper";function m(e){let{components:a,...n}=e;return(0,r.yg)(d,(0,t.A)({},y,n,{components:a,mdxType:"MDXLayout"}),(0,r.yg)("h1",{id:"operators"},"Operators"),(0,r.yg)("p",null,"This page discusses styles for all operators, including arithmetic, comparison, assignment, and other operators."),(0,r.yg)("h2",{id:"arithmetics"},"Arithmetics"),(0,r.yg)("h3",{id:"no-bitwise"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-bitwise"},(0,r.yg)("inlineCode",{parentName:"a"},"no-bitwise"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"Bitwise operators are useful, efficient, and cool. We don't think disabling them are worthwhile."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"enum"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.USEFUL = 1"},"USEFUL")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"<<"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.EFFICIENT = 2"},"EFFICIENT")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"<<"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.OBSCURE = 4"},"OBSCURE")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"<<"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.COOL = 8"},"COOL")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"<<"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const bitwise: number"},"bitwise")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.USEFUL = 1"},"USEFUL")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.EFFICIENT = 2"},"EFFICIENT")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.COOL = 8"},"COOL")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"enum"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.USEFUL = 1"},"USEFUL")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"<<"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.EFFICIENT = 2"},"EFFICIENT")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"<<"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.OBSCURE = 4"},"OBSCURE")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"<<"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.COOL = 8"},"COOL")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"<<"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const bitwise: number"},"bitwise")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.USEFUL = 1"},"USEFUL")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.EFFICIENT = 2"},"EFFICIENT")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.COOL = 8"},"COOL")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")))))),(0,r.yg)("h3",{id:"prefer-exponentiation-operator"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-exponentiation-operator"},(0,r.yg)("inlineCode",{parentName:"a"},"prefer-exponentiation-operator"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Use exponentiation instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"Math.pow"),". This works with BigInts too."),(0,r.yg)("h2",{id:"comparisons"},"Comparisons"),(0,r.yg)("h3",{id:"eqeqeq"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/eqeqeq"},(0,r.yg)("inlineCode",{parentName:"a"},"eqeqeq"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Always require ",(0,r.yg)("inlineCode",{parentName:"li"},"===")," (",(0,r.yg)("inlineCode",{parentName:"li"},'"always"'),")"),(0,r.yg)("li",{parentName:"ul"},"Require strict comparison with ",(0,r.yg)("inlineCode",{parentName:"li"},"null")," (",(0,r.yg)("inlineCode",{parentName:"li"},'null: "always"'),")")))),(0,r.yg)("p",null,"Regular equality can result in surprising results (e.g. ",(0,r.yg)("inlineCode",{parentName:"p"},'1 == "1"'),"). Although this is partly mitigated by TypeScript's type-checking, it can still become a pitfall on module boundaries without strict input validations."),(0,r.yg)("p",null,(0,r.yg)("inlineCode",{parentName:"p"},"null")," is not exempted from this rule. We require you to explicitly check for ",(0,r.yg)("inlineCode",{parentName:"p"},"null")," with ",(0,r.yg)("inlineCode",{parentName:"p"},"===")," or ",(0,r.yg)("inlineCode",{parentName:"p"},"!=="),", because without TypeScript, your code may not work against ",(0,r.yg)("inlineCode",{parentName:"p"},"document.all"),". ",(0,r.yg)("inlineCode",{parentName:"p"},"a === null || a === undefined")," is not exactly equivalent to ",(0,r.yg)("inlineCode",{parentName:"p"},"a == null"),". If you find it too pedantic, consider toggling it to ",(0,r.yg)("inlineCode",{parentName:"p"},'null: "ignore"')," yourself."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function foo(a?: string | null): string"},"foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: string | null | undefined"},"a")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"?:"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: string | null | undefined"},"a")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"||"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: string | undefined"},"a")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var undefined"},"undefined")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"Nullish"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: string"},"a"),"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Only strings are left here")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function foo(a?: string | null): string"},"foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: string | null | undefined"},"a")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"?:"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: string | null | undefined"},"a")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"||"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: string | undefined"},"a")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var undefined"},"undefined")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"Nullish"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: string"},"a"),"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Only strings are left here")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h3",{id:"no-compare-neg-zero"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-compare-neg-zero"},(0,r.yg)("inlineCode",{parentName:"a"},"no-compare-neg-zero"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Comparing against negative zero is either a typo (an extra ",(0,r.yg)("inlineCode",{parentName:"p"},"-"),") or is intended to be ",(0,r.yg)("inlineCode",{parentName:"p"},"Object.is"),". In either case, such usage should be reported."),(0,r.yg)("h3",{id:"no-eq-null"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-eq-null"},(0,r.yg)("inlineCode",{parentName:"a"},"no-eq-null"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"This is a subset of ",(0,r.yg)("inlineCode",{parentName:"p"},"eqeqeq"),". Again, you may turn this off if the project doesn't care about ",(0,r.yg)("inlineCode",{parentName:"p"},"document.all"),"."),(0,r.yg)("h3",{id:"no-self-compare"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-self-compare"},(0,r.yg)("inlineCode",{parentName:"a"},"no-self-compare"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"See ",(0,r.yg)("a",{parentName:"p",href:"#no-self-assign"},(0,r.yg)("inlineCode",{parentName:"a"},"no-self-assign")),". If you want to test for ",(0,r.yg)("inlineCode",{parentName:"p"},"NaN"),", use ",(0,r.yg)("inlineCode",{parentName:"p"},"Number.isNaN"),"."),(0,r.yg)("h3",{id:"use-isnan"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/use-isnan"},(0,r.yg)("inlineCode",{parentName:"a"},"use-isnan"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Do not write ",(0,r.yg)("inlineCode",{parentName:"li"},"case NaN")," (",(0,r.yg)("inlineCode",{parentName:"li"},'"enforceForSwitchCase": true'),")"),(0,r.yg)("li",{parentName:"ul"},"Do not write ",(0,r.yg)("inlineCode",{parentName:"li"},".indexOf(NaN)")," (",(0,r.yg)("inlineCode",{parentName:"li"},'"enforceForIndexOf": true'),")")))),(0,r.yg)("p",null,(0,r.yg)("inlineCode",{parentName:"p"},"NaN")," never compares equal to anything, so ",(0,r.yg)("inlineCode",{parentName:"p"},"x === NaN")," is likely a mistake. Other cases where ",(0,r.yg)("inlineCode",{parentName:"p"},"===")," semantics is used, including ",(0,r.yg)("inlineCode",{parentName:"p"},"switch-case")," and ",(0,r.yg)("inlineCode",{parentName:"p"},"indexOf"),", should also not compare against ",(0,r.yg)("inlineCode",{parentName:"p"},"NaN"),". Use ",(0,r.yg)("inlineCode",{parentName:"p"},"Number.isNaN")," instead."),(0,r.yg)("h3",{id:"yoda"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/yoda"},(0,r.yg)("inlineCode",{parentName:"a"},"yoda"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Always require the literal to be on the right (",(0,r.yg)("inlineCode",{parentName:"li"},'"never"'),")"),(0,r.yg)("li",{parentName:"ul"},"Allow ",(0,r.yg)("inlineCode",{parentName:"li"},"0 <= x && x <= 1")," style (",(0,r.yg)("inlineCode",{parentName:"li"},"exceptRange: true"),")")))),(0,r.yg)("p",null,"Yoda conditions make code harder to read. With proper formatting and linting, there's no way ",(0,r.yg)("inlineCode",{parentName:"p"},"===")," can be confused with ",(0,r.yg)("inlineCode",{parentName:"p"},"="),". The only allowed case is range comparisons, which simulates the ",(0,r.yg)("inlineCode",{parentName:"p"},"0 <= x <= 1")," style."),(0,r.yg)("h2",{id:"objects"},"Objects"),(0,r.yg)("h3",{id:"dot-notation"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/dot-notation"},(0,r.yg)("inlineCode",{parentName:"a"},"dot-notation"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Keywords are treated the same as ordinary properties (non-ES3 compatible) (",(0,r.yg)("inlineCode",{parentName:"li"},"allowKeywords: true"),")")))),(0,r.yg)("p",null,"From the ESLint docs:"),(0,r.yg)("blockquote",null,(0,r.yg)("p",{parentName:"blockquote"},"the dot notation is often preferred because it is easier to read, less verbose, and works better with aggressive JavaScript minimizers.")),(0,r.yg)("p",null,"There's no exception to this rule. We turn off the ",(0,r.yg)("inlineCode",{parentName:"p"},"noPropertyAccessFromIndexSignature")," TS option, and we don't use TS ",(0,r.yg)("inlineCode",{parentName:"p"},"private"),"/",(0,r.yg)("inlineCode",{parentName:"p"},"protected")," members, so there's no reason to use bracket notation."),(0,r.yg)("h3",{id:"new-cap"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/new-cap"},(0,r.yg)("inlineCode",{parentName:"a"},"new-cap"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Require capitalized names to be called with ",(0,r.yg)("inlineCode",{parentName:"li"},"new")," (",(0,r.yg)("inlineCode",{parentName:"li"},'"capIsNew": true'),")"),(0,r.yg)("li",{parentName:"ul"},"Require ",(0,r.yg)("inlineCode",{parentName:"li"},"new")," to only be called on capitalized names (",(0,r.yg)("inlineCode",{parentName:"li"},'"newIsCap": true'),")"),(0,r.yg)("li",{parentName:"ul"},"Check properties too (",(0,r.yg)("inlineCode",{parentName:"li"},'"properties": true'),")")))),(0,r.yg)("p",null,"This is purely a stylistic choice. Use capital iff you have a constructor. This is also checked by ",(0,r.yg)("inlineCode",{parentName:"p"},"naming-convention"),". If you are using constructors generically, still use uppercase:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"clone"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"obj"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"object"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Ctor"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," obj."),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"?.["),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Symbol"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},".species] "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"??"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," obj."),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"??"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Object"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"Ctor"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"clone"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"obj"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"object"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Ctor"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," obj."),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"?.["),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Symbol"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".species] "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"??"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," obj."),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"??"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Object"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"Ctor"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h3",{id:"no-delete-var"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-delete-var"},(0,r.yg)("inlineCode",{parentName:"a"},"no-delete-var"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"The ",(0,r.yg)("inlineCode",{parentName:"p"},"delete")," operator should only be used on object properties. Deleting anything else is either a no-op or a syntax error. Notably, ",(0,r.yg)("inlineCode",{parentName:"p"},"delete x")," is (a) a syntax error in strict mode (b) a no-op in non-strict mode if you are trying to delete a ",(0,r.yg)("inlineCode",{parentName:"p"},"var")," (since variables are always non-configurable). If you want to delete a configurable global property, use ",(0,r.yg)("inlineCode",{parentName:"p"},"delete globalThis.x"),"."),(0,r.yg)("h3",{id:"no-new"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-new"},(0,r.yg)("inlineCode",{parentName:"a"},"no-new"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"It's generally useful for detecting unused expressions, but in the case where we actually have unused ",(0,r.yg)("inlineCode",{parentName:"p"},"new")," expressions, they are almost 100% intentional. The most representative case is using ",(0,r.yg)("inlineCode",{parentName:"p"},"new URL()")," to test if a string is a valid URL (until in 2023 we had a ",(0,r.yg)("inlineCode",{parentName:"p"},"URL.canParse()")," function)."),(0,r.yg)("h3",{id:"no-unsafe-optional-chaining"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unsafe-optional-chaining"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unsafe-optional-chaining"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Disallow optional chaining as arithmetic operands (",(0,r.yg)("inlineCode",{parentName:"li"},"disallowArithmeticOperators: true"),")"))),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(18048): 'a.foo' is possibly 'undefined'."))))),(0,r.yg)("p",null,"Optional chaining should be able to return ",(0,r.yg)("inlineCode",{parentName:"p"},"undefined")," by design. Using it in places where ",(0,r.yg)("inlineCode",{parentName:"p"},"undefined")," is not allowed potentially leads to runtime errors. This is also checked by TypeScript. If the left-hand side can never be nullish, remove the optional chaining (also enforced by ",(0,r.yg)("inlineCode",{parentName:"p"},"@typescript-eslint/no-unnecessary-condition"),")."),(0,r.yg)("h3",{id:"use-of-in"},"Use of ",(0,r.yg)("inlineCode",{parentName:"h3"},"in")),(0,r.yg)("p",null,"We ban the use of ",(0,r.yg)("inlineCode",{parentName:"p"},"in")," because of many reasons: (a) it's not type-safe (b) it tests for properties on the prototype which is prone to injection. If you want to narrow an unknown type, write a custom type guard (and optionally disable the rule for that line). If you want to use an object as a dictionary, use a ",(0,r.yg)("inlineCode",{parentName:"p"},"Map"),"."),(0,r.yg)("h2",{id:"boolean-logic"},"Boolean logic"),(0,r.yg)("h3",{id:"no-constant-binary-expression"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-constant-binary-expression"},(0,r.yg)("inlineCode",{parentName:"a"},"no-constant-binary-expression"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"@typescript-eslint/no-unnecessary-condition"))))),(0,r.yg)("p",null,"Despite not using type information, this rule does its best at reliably testing for useless code and warning against potential mistakes."),(0,r.yg)("h3",{id:"no-extra-boolean-cast"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-extra-boolean-cast"},(0,r.yg)("inlineCode",{parentName:"a"},"no-extra-boolean-cast"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Check logical expressions too (",(0,r.yg)("inlineCode",{parentName:"li"},'"enforceForLogicalOperands": true'),")")))),(0,r.yg)("p",null,"Do not cast to booleans when values are already in a boolean context."),(0,r.yg)("h3",{id:"no-nested-ternary"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-nested-ternary"},(0,r.yg)("inlineCode",{parentName:"a"},"no-nested-ternary"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,'You can nest ternaries if you want. It does come with readability tradeoffs, but 2 or 3 levels are generally fine, especially if it\'s written in a "continuous" style: ',(0,r.yg)("inlineCode",{parentName:"p"},"a ? b : c ? d : e"),". The benefit of using nested ternaries is to avoid side effects, because ",(0,r.yg)("inlineCode",{parentName:"p"},"if...else")," statements are clunky and sometimes require mutating variables/properties."),(0,r.yg)("h3",{id:"no-ternary"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-ternary"},(0,r.yg)("inlineCode",{parentName:"a"},"no-ternary"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"Use ternaries. Use them to replace simple ",(0,r.yg)("inlineCode",{parentName:"p"},"if-else")," so you can avoid unneeded re-assignments."),(0,r.yg)("h3",{id:"no-unneeded-ternary"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unneeded-ternary"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unneeded-ternary"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Disallow all ternaries that can be simplified (",(0,r.yg)("inlineCode",{parentName:"li"},"defaultAssignment: false"),")")))),(0,r.yg)("p",null,"Don't use ternaries when you don't need to. Such cases include when the two branches are ",(0,r.yg)("inlineCode",{parentName:"p"},"true")," and ",(0,r.yg)("inlineCode",{parentName:"p"},"false")," (use ",(0,r.yg)("inlineCode",{parentName:"p"},"Boolean()")," instead) and ",(0,r.yg)("inlineCode",{parentName:"p"},"x ? x : y")," (use ",(0,r.yg)("inlineCode",{parentName:"p"},"??")," or ",(0,r.yg)("inlineCode",{parentName:"p"},"||")," instead)."),(0,r.yg)("h3",{id:"no-unsafe-negation"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unsafe-negation"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unsafe-negation"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Disallow negations to be used in comparisons (",(0,r.yg)("inlineCode",{parentName:"li"},"enforceForOrderingRelations: true"),")")))),(0,r.yg)("p",null,(0,r.yg)("inlineCode",{parentName:"p"},"!")," has higher precedence than relational operators (",(0,r.yg)("inlineCode",{parentName:"p"},"in"),", ",(0,r.yg)("inlineCode",{parentName:"p"},"instanceof"),", ",(0,r.yg)("inlineCode",{parentName:"p"},"<"),", ",(0,r.yg)("inlineCode",{parentName:"p"},">"),", ",(0,r.yg)("inlineCode",{parentName:"p"},"<="),", ",(0,r.yg)("inlineCode",{parentName:"p"},">="),"), so ",(0,r.yg)("inlineCode",{parentName:"p"},"!a instanceof b")," is always a bug because a boolean is never an instance of any constructor (unless in corner cases when ",(0,r.yg)("inlineCode",{parentName:"p"},"b")," has a ",(0,r.yg)("inlineCode",{parentName:"p"},"@@hasInstance")," method). Prettier will add parentheses to make it more obvious (",(0,r.yg)("inlineCode",{parentName:"p"},"(!a) instanceof b"),"), but ESLint will help you catch it before formatting."),(0,r.yg)("h2",{id:"assignment"},"Assignment"),(0,r.yg)("p",null,"The general principle for using assignment operators is to treat them as statements, not expressions. You should generally not rely on their return values, including in conditions, chained assignments, and return statements."),(0,r.yg)("h3",{id:"logical-assignment-operators"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/logical-assignment-operators"},(0,r.yg)("inlineCode",{parentName:"a"},"logical-assignment-operators"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Require all logical assignments to be used where possible (",(0,r.yg)("inlineCode",{parentName:"li"},'"always"'),")"),(0,r.yg)("li",{parentName:"ul"},"Require equivalent ",(0,r.yg)("inlineCode",{parentName:"li"},"if")," statements to be refactored to logical assignments (",(0,r.yg)("inlineCode",{parentName:"li"},"enforceForIfStatements: true"),")")))),(0,r.yg)("p",null,"This has the same motivation as ",(0,r.yg)("inlineCode",{parentName:"p"},"operator-assignment"),". Logical assignments also prevent unnecessary assignments\u2014if ",(0,r.yg)("inlineCode",{parentName:"p"},"a ??= b")," where ",(0,r.yg)("inlineCode",{parentName:"p"},"a")," is nullish, no assignment is made and no side effects are triggered."),(0,r.yg)("h3",{id:"no-cond-assign"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-cond-assign"},(0,r.yg)("inlineCode",{parentName:"a"},"no-cond-assign"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Always disallow assignments in conditions (",(0,r.yg)("inlineCode",{parentName:"li"},'"always"'),")")))),(0,r.yg)("p",null,"Assignments in conditionals are a common source of mistakes."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (res.status "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"404"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"Not found"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// res.status becomes 404"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (res.status "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"404"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"Not found"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// res.status becomes 404")))))),(0,r.yg)("p",null,"There is never a case where putting assignments in conditionals does not significantly subtract from readability."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"setHeight"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"node"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"HTMLElement"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," someNode "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," node;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"do"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," someNode.style.height "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"100px"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"while"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ((someNode "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," someNode.parentNode));")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ First parse: this is an equality test?")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ Second parse: this is an assignment. Is that a mistake?")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ Third parse: oh, it's intended because of the extra brackets")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"setHeight"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"node"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"HTMLElement"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," someNode "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," node;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"do"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," someNode.style.height "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"100px"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"while"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ((someNode "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," someNode.parentNode));")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ First parse: this is an equality test?")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ Second parse: this is an assignment. Is that a mistake?")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ Third parse: oh, it's intended because of the extra brackets")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("p",null,"Always write assignments as a separate statement:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"setHeight"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"node"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"HTMLElement"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," someNode "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," node;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"while"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (someNode) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," someNode.style.height "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"100px"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," someNode "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," someNode.parentNode;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"setHeight"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"node"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"HTMLElement"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," someNode "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," node;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"while"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (someNode) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," someNode.style.height "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"100px"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," someNode "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," someNode.parentNode;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("p",null,"It also permits us to use ",(0,r.yg)("inlineCode",{parentName:"p"},"while")," instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"do-while"),", which is still a minor readability improvement."),(0,r.yg)("p",null,"There are some cases where assignments in conditionals are useful, such as to reduce code duplication:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," input;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"while"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ((input "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"getInput"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"())) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," input;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"while"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ((input "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"getInput"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"())) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("p",null,"In such cases, you can either disable the rule, or use an explicit equality check (",(0,r.yg)("inlineCode",{parentName:"p"},"while ((input = getInput()) !== null)"),"). We don't make ESLint special-case this because Prettier automatically adds braces, which means it's not going to end up reporting anything."),(0,r.yg)("h3",{id:"no-multi-assign"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-multi-assign"},(0,r.yg)("inlineCode",{parentName:"a"},"no-multi-assign"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Disallow all multiple assignments (",(0,r.yg)("inlineCode",{parentName:"li"},'"ignoreNonDeclaration": false'),")")))),(0,r.yg)("p",null,"Do not chain assignments (",(0,r.yg)("inlineCode",{parentName:"p"},"a = b = c = 1"),'). This is because Prettier will add parentheses, which makes the assignment not a "chain" anyway. Write multiple lines instead.'),(0,r.yg)("h3",{id:"no-plusplus"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-plusplus"},(0,r.yg)("inlineCode",{parentName:"a"},"no-plusplus"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"Use ",(0,r.yg)("inlineCode",{parentName:"p"},"a++")," instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"a += 1"),". It's shorter and more idiomatic. However, generally do not rely on the return value of ",(0,r.yg)("inlineCode",{parentName:"p"},"++"),"/",(0,r.yg)("inlineCode",{parentName:"p"},"--")," as it can be confusing."),(0,r.yg)("h3",{id:"no-return-assign"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-return-assign"},(0,r.yg)("inlineCode",{parentName:"a"},"no-return-assign"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Disallow all assignments in return statements (",(0,r.yg)("inlineCode",{parentName:"li"},'"always"'),")")))),(0,r.yg)("p",null,"Again, you should not rely on the return value of assignments. If you have something to assign to (",(0,r.yg)("inlineCode",{parentName:"p"},"foo = ..."),"), then just return it on a separate statement (",(0,r.yg)("inlineCode",{parentName:"p"},"return foo"),"). We don't use ",(0,r.yg)("inlineCode",{parentName:"p"},"except-parens")," because Prettier will add parentheses anyway."),(0,r.yg)("h3",{id:"no-self-assign"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-self-assign"},(0,r.yg)("inlineCode",{parentName:"a"},"no-self-assign"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Disallow all self-assignments (",(0,r.yg)("inlineCode",{parentName:"li"},'"props": true'),")")))),(0,r.yg)("p",null,"Self-assignments are usually a no-op. Self-assignment to properties could be no-op but the case where it's not is very confusing to readers. If your property accessor is not idempotent, you should probably refactor it. If this API comes from a library, use a comment."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"obj"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"get"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Math"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"random"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"set"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"value"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(value);")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"};")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"obj.foo "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," obj.foo; "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ???"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"obj"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"get"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Math"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"random"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"set"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"value"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(value);")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"obj.foo "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," obj.foo; "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ???")))))),(0,r.yg)("h3",{id:"operator-assignment"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/operator-assignment"},(0,r.yg)("inlineCode",{parentName:"a"},"operator-assignment"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Require all compound assignments to be used where possible (",(0,r.yg)("inlineCode",{parentName:"li"},'"always"'),")")))),(0,r.yg)("p",null,"Compound assignments enable you to write shorter code."),(0,r.yg)("h2",{id:"others"},"Others"),(0,r.yg)("h3",{id:"no-implicit-coercion"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-implicit-coercion"},(0,r.yg)("inlineCode",{parentName:"a"},"no-implicit-coercion"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Disallow all implicit coercions (",(0,r.yg)("inlineCode",{parentName:"li"},"boolean: false, number: false, string: false, allow: []"),")")))),(0,r.yg)("p",null,'Many "idioms" do not lead to correct or fool-proof code. The common case of ',(0,r.yg)("inlineCode",{parentName:"p"},'"" + x')," ",(0,r.yg)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#string_coercion"},"is plain wrong"),". ",(0,r.yg)("inlineCode",{parentName:"p"},"+x")," and ",(0,r.yg)("inlineCode",{parentName:"p"},"`${x}`")," are not as user-friendly as ",(0,r.yg)("inlineCode",{parentName:"p"},"Number(x)")," or ",(0,r.yg)("inlineCode",{parentName:"p"},"String(x)")," because the former don't handle ",(0,r.yg)("inlineCode",{parentName:"p"},"BigInt")," or ",(0,r.yg)("inlineCode",{parentName:"p"},"Symbol")," types, respectively. Always use the longer form for readability and for maximum safety."),(0,r.yg)("h3",{id:"no-sequences"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-sequences"},(0,r.yg)("inlineCode",{parentName:"a"},"no-sequences"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Don't use the comma operator unless in the updater of a ",(0,r.yg)("inlineCode",{parentName:"p"},"for")," loop. Write multiple expressions using multiple statements."),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Don't use the comma operator just to make a concise arrow."),(0,r.yg)("li",{parentName:"ul"},"Don't use the comma operator to discard the ",(0,r.yg)("inlineCode",{parentName:"li"},"this")," binding; use the ",(0,r.yg)("inlineCode",{parentName:"li"},"call")," method instead."),(0,r.yg)("li",{parentName:"ul"},"Don't use the comma operator to trigger indirect ",(0,r.yg)("inlineCode",{parentName:"li"},"eval")," (do you really need ",(0,r.yg)("inlineCode",{parentName:"li"},"eval"),"?). Use ",(0,r.yg)("inlineCode",{parentName:"li"},"eval?.()")," or ",(0,r.yg)("inlineCode",{parentName:"li"},"Function")," instead.")),(0,r.yg)("h3",{id:"no-void"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-void"},(0,r.yg)("inlineCode",{parentName:"a"},"no-void"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Allow ",(0,r.yg)("inlineCode",{parentName:"li"},"void")," as expression statements (",(0,r.yg)("inlineCode",{parentName:"li"},"allowAsStatement: true"),")")))),(0,r.yg)("p",null,"Generally, ",(0,r.yg)("inlineCode",{parentName:"p"},"void")," operators are not needed. We don't need to use ",(0,r.yg)("inlineCode",{parentName:"p"},"void")," to signify that we are discarding the return value; for example, in arrow functions, we can just be more explicit by expanding the arrow function body. However, we allow ",(0,r.yg)("inlineCode",{parentName:"p"},"void")," as a statement because ",(0,r.yg)("inlineCode",{parentName:"p"},"@typescript-eslint/no-floating-promises")," requires it to explicitly discard promises."),(0,r.yg)("h3",{id:"valid-typeof"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/valid-typeof"},(0,r.yg)("inlineCode",{parentName:"a"},"valid-typeof"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Do not allow comparing to anything other than string literals or another ",(0,r.yg)("inlineCode",{parentName:"li"},"typeof")," (",(0,r.yg)("inlineCode",{parentName:"li"},"requireStringLiterals: true"),")")))),(0,r.yg)("p",null,"You should only compare ",(0,r.yg)("inlineCode",{parentName:"p"},"typeof")," to string literals. ",(0,r.yg)("inlineCode",{parentName:"p"},"typeof x === typeof y")," is also considered a valid pattern. Other cases, such as saving the result of ",(0,r.yg)("inlineCode",{parentName:"p"},"typeof")," to a variable, are too niche and not allowed by default by this rule, but you can disable the rule in that case."),(0,r.yg)("p",null,"Note that TypeScript disallows certain but not all invalid comparisons."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"declare"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"unknown"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"declare"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const type: string"},"type")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"str"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},'This comparison appears to be unintentional because the types \'"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"\' and \'"str"\' have no overlap.'),(0,r.yg)("span",{parentName:"span",className:"code"},"2367")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},'This comparison appears to be unintentional because the types \'"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"\' and \'"str"\' have no overlap.'),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"This comparison appears to be unintentional because the types 'string' and 'number' have no overlap."),(0,r.yg)("span",{parentName:"span",className:"code"},"2367")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"This comparison appears to be unintentional because the types 'string' and 'number' have no overlap."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var undefined"},"undefined")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Valid ???")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const type: string"},"type"),";"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"declare"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"unknown"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"declare"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const type: string"},"type")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"str"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},'This comparison appears to be unintentional because the types \'"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"\' and \'"str"\' have no overlap.'),(0,r.yg)("span",{parentName:"span",className:"code"},"2367")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},'This comparison appears to be unintentional because the types \'"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"\' and \'"str"\' have no overlap.'),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"This comparison appears to be unintentional because the types 'string' and 'number' have no overlap."),(0,r.yg)("span",{parentName:"span",className:"code"},"2367")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"This comparison appears to be unintentional because the types 'string' and 'number' have no overlap."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var undefined"},"undefined")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Valid ???")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const type: string"},"type"),";")))))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ce13fc4a.b035076d.js b/assets/js/ce13fc4a.b035076d.js deleted file mode 100644 index ced6831..0000000 --- a/assets/js/ce13fc4a.b035076d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[256],{8961:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>i,contentTitle:()=>l,default:()=>c,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var n=t(2685),r=(t(7378),t(5318));const s={sidebar_position:4},l="Operators",o={unversionedId:"eslint-base/operators",id:"eslint-base/operators",title:"Operators",description:"This page discusses styles for all operators, including arithmetic, comparison, assignment, and other operators.",source:"@site/../docs/eslint-base/operators.md",sourceDirName:"eslint-base",slug:"/eslint-base/operators",permalink:"/js-style-guide/eslint-base/operators",draft:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"defaultSidebar",previous:{title:"Variables & names",permalink:"/js-style-guide/eslint-base/variables-names"},next:{title:"Control flow",permalink:"/js-style-guide/eslint-base/control-flow"}},i={},p=[{value:"Arithmetics",id:"arithmetics",level:2},{value:"no-bitwise",id:"no-bitwise",level:3},{value:"prefer-exponentiation-operator",id:"prefer-exponentiation-operator",level:3},{value:"Comparisons",id:"comparisons",level:2},{value:"eqeqeq",id:"eqeqeq",level:3},{value:"no-compare-neg-zero",id:"no-compare-neg-zero",level:3},{value:"no-eq-null",id:"no-eq-null",level:3},{value:"no-self-compare",id:"no-self-compare",level:3},{value:"use-isnan",id:"use-isnan",level:3},{value:"yoda",id:"yoda",level:3},{value:"Objects",id:"objects",level:2},{value:"dot-notation",id:"dot-notation",level:3},{value:"new-cap",id:"new-cap",level:3},{value:"no-delete-var",id:"no-delete-var",level:3},{value:"no-new",id:"no-new",level:3},{value:"no-unsafe-optional-chaining",id:"no-unsafe-optional-chaining",level:3},{value:"Use of in",id:"use-of-in",level:3},{value:"Boolean logic",id:"boolean-logic",level:2},{value:"no-constant-binary-expression",id:"no-constant-binary-expression",level:3},{value:"no-extra-boolean-cast",id:"no-extra-boolean-cast",level:3},{value:"no-nested-ternary",id:"no-nested-ternary",level:3},{value:"no-ternary",id:"no-ternary",level:3},{value:"no-unneeded-ternary",id:"no-unneeded-ternary",level:3},{value:"no-unsafe-negation",id:"no-unsafe-negation",level:3},{value:"Assignment",id:"assignment",level:2},{value:"logical-assignment-operators",id:"logical-assignment-operators",level:3},{value:"no-cond-assign",id:"no-cond-assign",level:3},{value:"no-multi-assign",id:"no-multi-assign",level:3},{value:"no-plusplus",id:"no-plusplus",level:3},{value:"no-return-assign",id:"no-return-assign",level:3},{value:"no-self-assign",id:"no-self-assign",level:3},{value:"operator-assignment",id:"operator-assignment",level:3},{value:"Others",id:"others",level:2},{value:"no-implicit-coercion",id:"no-implicit-coercion",level:3},{value:"no-sequences",id:"no-sequences",level:3},{value:"no-void",id:"no-void",level:3},{value:"valid-typeof",id:"valid-typeof",level:3}],d={toc:p},m="wrapper";function c(e){let{components:a,...t}=e;return(0,r.kt)(m,(0,n.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"operators"},"Operators"),(0,r.kt)("p",null,"This page discusses styles for all operators, including arithmetic, comparison, assignment, and other operators."),(0,r.kt)("h2",{id:"arithmetics"},"Arithmetics"),(0,r.kt)("h3",{id:"no-bitwise"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-bitwise"},(0,r.kt)("inlineCode",{parentName:"a"},"no-bitwise"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,"Bitwise operators are useful, efficient, and cool. We don't think disabling them are worthwhile."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"enum"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.USEFUL = 1"},"USEFUL")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"<<"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.EFFICIENT = 2"},"EFFICIENT")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"<<"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.OBSCURE = 4"},"OBSCURE")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"<<"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.COOL = 8"},"COOL")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"<<"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const bitwise: number"},"bitwise")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.USEFUL = 1"},"USEFUL")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.EFFICIENT = 2"},"EFFICIENT")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.COOL = 8"},"COOL")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"enum"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.USEFUL = 1"},"USEFUL")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"<<"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.EFFICIENT = 2"},"EFFICIENT")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"<<"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.OBSCURE = 4"},"OBSCURE")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"<<"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.COOL = 8"},"COOL")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"<<"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const bitwise: number"},"bitwise")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.USEFUL = 1"},"USEFUL")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.EFFICIENT = 2"},"EFFICIENT")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"enum Traits"},"Traits"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(enum member) Traits.COOL = 8"},"COOL")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")))))),(0,r.kt)("h3",{id:"prefer-exponentiation-operator"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-exponentiation-operator"},(0,r.kt)("inlineCode",{parentName:"a"},"prefer-exponentiation-operator"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Use exponentiation instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"Math.pow"),". This works with BigInts too."),(0,r.kt)("h2",{id:"comparisons"},"Comparisons"),(0,r.kt)("h3",{id:"eqeqeq"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/eqeqeq"},(0,r.kt)("inlineCode",{parentName:"a"},"eqeqeq"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Always require ",(0,r.kt)("inlineCode",{parentName:"li"},"===")," (",(0,r.kt)("inlineCode",{parentName:"li"},'"always"'),")"),(0,r.kt)("li",{parentName:"ul"},"Require strict comparison with ",(0,r.kt)("inlineCode",{parentName:"li"},"null")," (",(0,r.kt)("inlineCode",{parentName:"li"},'null: "always"'),")")))),(0,r.kt)("p",null,"Regular equality can result in surprising results (e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},'1 == "1"'),"). Although this is partly mitigated by TypeScript's type-checking, it can still become a pitfall on module boundaries without strict input validations."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"null")," is not exempted from this rule. We require you to explicitly check for ",(0,r.kt)("inlineCode",{parentName:"p"},"null")," with ",(0,r.kt)("inlineCode",{parentName:"p"},"===")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"!=="),", because without TypeScript, your code may not work against ",(0,r.kt)("inlineCode",{parentName:"p"},"document.all"),". ",(0,r.kt)("inlineCode",{parentName:"p"},"a === null || a === undefined")," is not exactly equivalent to ",(0,r.kt)("inlineCode",{parentName:"p"},"a == null"),". If you find it too pedantic, consider toggling it to ",(0,r.kt)("inlineCode",{parentName:"p"},'null: "ignore"')," yourself."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function foo(a?: string | null): string"},"foo")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: string | null | undefined"},"a")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"?:"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: string | null | undefined"},"a")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"||"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: string | undefined"},"a")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"var undefined"},"undefined")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"Nullish"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: string"},"a"),"; "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Only strings are left here")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function foo(a?: string | null): string"},"foo")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: string | null | undefined"},"a")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"?:"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: string | null | undefined"},"a")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"||"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: string | undefined"},"a")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"var undefined"},"undefined")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"Nullish"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: string"},"a"),"; "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Only strings are left here")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("h3",{id:"no-compare-neg-zero"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-compare-neg-zero"},(0,r.kt)("inlineCode",{parentName:"a"},"no-compare-neg-zero"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Comparing against negative zero is either a typo (an extra ",(0,r.kt)("inlineCode",{parentName:"p"},"-"),") or is intended to be ",(0,r.kt)("inlineCode",{parentName:"p"},"Object.is"),". In either case, such usage should be reported."),(0,r.kt)("h3",{id:"no-eq-null"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-eq-null"},(0,r.kt)("inlineCode",{parentName:"a"},"no-eq-null"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"This is a subset of ",(0,r.kt)("inlineCode",{parentName:"p"},"eqeqeq"),". Again, you may turn this off if the project doesn't care about ",(0,r.kt)("inlineCode",{parentName:"p"},"document.all"),"."),(0,r.kt)("h3",{id:"no-self-compare"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-self-compare"},(0,r.kt)("inlineCode",{parentName:"a"},"no-self-compare"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"#no-self-assign"},(0,r.kt)("inlineCode",{parentName:"a"},"no-self-assign")),". If you want to test for ",(0,r.kt)("inlineCode",{parentName:"p"},"NaN"),", use ",(0,r.kt)("inlineCode",{parentName:"p"},"Number.isNaN"),"."),(0,r.kt)("h3",{id:"use-isnan"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/use-isnan"},(0,r.kt)("inlineCode",{parentName:"a"},"use-isnan"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Do not write ",(0,r.kt)("inlineCode",{parentName:"li"},"case NaN")," (",(0,r.kt)("inlineCode",{parentName:"li"},'"enforceForSwitchCase": true'),")"),(0,r.kt)("li",{parentName:"ul"},"Do not write ",(0,r.kt)("inlineCode",{parentName:"li"},".indexOf(NaN)")," (",(0,r.kt)("inlineCode",{parentName:"li"},'"enforceForIndexOf": true'),")")))),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"NaN")," never compares equal to anything, so ",(0,r.kt)("inlineCode",{parentName:"p"},"x === NaN")," is likely a mistake. Other cases where ",(0,r.kt)("inlineCode",{parentName:"p"},"===")," semantics is used, including ",(0,r.kt)("inlineCode",{parentName:"p"},"switch-case")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"indexOf"),", should also not compare against ",(0,r.kt)("inlineCode",{parentName:"p"},"NaN"),". Use ",(0,r.kt)("inlineCode",{parentName:"p"},"Number.isNaN")," instead."),(0,r.kt)("h3",{id:"yoda"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/yoda"},(0,r.kt)("inlineCode",{parentName:"a"},"yoda"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Always require the literal to be on the right (",(0,r.kt)("inlineCode",{parentName:"li"},'"never"'),")"),(0,r.kt)("li",{parentName:"ul"},"Allow ",(0,r.kt)("inlineCode",{parentName:"li"},"0 <= x && x <= 1")," style (",(0,r.kt)("inlineCode",{parentName:"li"},"exceptRange: true"),")")))),(0,r.kt)("p",null,"Yoda conditions make code harder to read. With proper formatting and linting, there's no way ",(0,r.kt)("inlineCode",{parentName:"p"},"===")," can be confused with ",(0,r.kt)("inlineCode",{parentName:"p"},"="),". The only allowed case is range comparisons, which simulates the ",(0,r.kt)("inlineCode",{parentName:"p"},"0 <= x <= 1")," style."),(0,r.kt)("h2",{id:"objects"},"Objects"),(0,r.kt)("h3",{id:"dot-notation"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/dot-notation"},(0,r.kt)("inlineCode",{parentName:"a"},"dot-notation"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Keywords are treated the same as ordinary properties (non-ES3 compatible) (",(0,r.kt)("inlineCode",{parentName:"li"},"allowKeywords: true"),")")))),(0,r.kt)("p",null,"From the ESLint docs:"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"the dot notation is often preferred because it is easier to read, less verbose, and works better with aggressive JavaScript minimizers.")),(0,r.kt)("p",null,"There's no exception to this rule. We turn off the ",(0,r.kt)("inlineCode",{parentName:"p"},"noPropertyAccessFromIndexSignature")," TS option, and we don't use TS ",(0,r.kt)("inlineCode",{parentName:"p"},"private"),"/",(0,r.kt)("inlineCode",{parentName:"p"},"protected")," members, so there's no reason to use bracket notation."),(0,r.kt)("h3",{id:"new-cap"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/new-cap"},(0,r.kt)("inlineCode",{parentName:"a"},"new-cap"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Require capitalized names to be called with ",(0,r.kt)("inlineCode",{parentName:"li"},"new")," (",(0,r.kt)("inlineCode",{parentName:"li"},'"capIsNew": true'),")"),(0,r.kt)("li",{parentName:"ul"},"Require ",(0,r.kt)("inlineCode",{parentName:"li"},"new")," to only be called on capitalized names (",(0,r.kt)("inlineCode",{parentName:"li"},'"newIsCap": true'),")"),(0,r.kt)("li",{parentName:"ul"},"Check properties too (",(0,r.kt)("inlineCode",{parentName:"li"},'"properties": true'),")")))),(0,r.kt)("p",null,"This is purely a stylistic choice. Use capital iff you have a constructor. This is also checked by ",(0,r.kt)("inlineCode",{parentName:"p"},"naming-convention"),". If you are using constructors generically, still use uppercase:"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"clone"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"obj"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"object"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Ctor"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," obj."),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"constructor"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"?.["),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Symbol"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},".species] "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"??"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," obj."),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"constructor"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"??"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Object"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"Ctor"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"clone"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"obj"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"object"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Ctor"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," obj."),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"constructor"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"?.["),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Symbol"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".species] "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"??"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," obj."),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"constructor"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"??"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Object"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"Ctor"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("h3",{id:"no-delete-var"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-delete-var"},(0,r.kt)("inlineCode",{parentName:"a"},"no-delete-var"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"delete")," operator should only be used on object properties. Deleting anything else is either a no-op or a syntax error. Notably, ",(0,r.kt)("inlineCode",{parentName:"p"},"delete x")," is (a) a syntax error in strict mode (b) a no-op in non-strict mode if you are trying to delete a ",(0,r.kt)("inlineCode",{parentName:"p"},"var")," (since variables are always non-configurable). If you want to delete a configurable global property, use ",(0,r.kt)("inlineCode",{parentName:"p"},"delete globalThis.x"),"."),(0,r.kt)("h3",{id:"no-new"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-new"},(0,r.kt)("inlineCode",{parentName:"a"},"no-new"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,"It's generally useful for detecting unused expressions, but in the case where we actually have unused ",(0,r.kt)("inlineCode",{parentName:"p"},"new")," expressions, they are almost 100% intentional. The most representative case is using ",(0,r.kt)("inlineCode",{parentName:"p"},"new URL()")," to test if a string is a valid URL (until in 2023 we had a ",(0,r.kt)("inlineCode",{parentName:"p"},"URL.canParse()")," function)."),(0,r.kt)("h3",{id:"no-unsafe-optional-chaining"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unsafe-optional-chaining"},(0,r.kt)("inlineCode",{parentName:"a"},"no-unsafe-optional-chaining"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Disallow optional chaining as arithmetic operands (",(0,r.kt)("inlineCode",{parentName:"li"},"disallowArithmeticOperators: true"),")"))),(0,r.kt)("li",{parentName:"ul"},"Related:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ts(18048): 'a.foo' is possibly 'undefined'."))))),(0,r.kt)("p",null,"Optional chaining should be able to return ",(0,r.kt)("inlineCode",{parentName:"p"},"undefined")," by design. Using it in places where ",(0,r.kt)("inlineCode",{parentName:"p"},"undefined")," is not allowed potentially leads to runtime errors. This is also checked by TypeScript. If the left-hand side can never be nullish, remove the optional chaining (also enforced by ",(0,r.kt)("inlineCode",{parentName:"p"},"@typescript-eslint/no-unnecessary-condition"),")."),(0,r.kt)("h3",{id:"use-of-in"},"Use of ",(0,r.kt)("inlineCode",{parentName:"h3"},"in")),(0,r.kt)("p",null,"We ban the use of ",(0,r.kt)("inlineCode",{parentName:"p"},"in")," because of many reasons: (a) it's not type-safe (b) it tests for properties on the prototype which is prone to injection. If you want to narrow an unknown type, write a custom type guard (and optionally disable the rule for that line). If you want to use an object as a dictionary, use a ",(0,r.kt)("inlineCode",{parentName:"p"},"Map"),"."),(0,r.kt)("h2",{id:"boolean-logic"},"Boolean logic"),(0,r.kt)("h3",{id:"no-constant-binary-expression"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-constant-binary-expression"},(0,r.kt)("inlineCode",{parentName:"a"},"no-constant-binary-expression"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Related:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"@typescript-eslint/no-unnecessary-condition"))))),(0,r.kt)("p",null,"Despite not using type information, this rule does its best at reliably testing for useless code and warning against potential mistakes."),(0,r.kt)("h3",{id:"no-extra-boolean-cast"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-extra-boolean-cast"},(0,r.kt)("inlineCode",{parentName:"a"},"no-extra-boolean-cast"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Check logical expressions too (",(0,r.kt)("inlineCode",{parentName:"li"},'"enforceForLogicalOperands": true'),")")))),(0,r.kt)("p",null,"Do not cast to booleans when values are already in a boolean context."),(0,r.kt)("h3",{id:"no-nested-ternary"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-nested-ternary"},(0,r.kt)("inlineCode",{parentName:"a"},"no-nested-ternary"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,'You can nest ternaries if you want. It does come with readability tradeoffs, but 2 or 3 levels are generally fine, especially if it\'s written in a "continuous" style: ',(0,r.kt)("inlineCode",{parentName:"p"},"a ? b : c ? d : e"),". The benefit of using nested ternaries is to avoid side effects, because ",(0,r.kt)("inlineCode",{parentName:"p"},"if...else")," statements are clunky and sometimes require mutating variables/properties."),(0,r.kt)("h3",{id:"no-ternary"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-ternary"},(0,r.kt)("inlineCode",{parentName:"a"},"no-ternary"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,"Use ternaries. Use them to replace simple ",(0,r.kt)("inlineCode",{parentName:"p"},"if-else")," so you can avoid unneeded re-assignments."),(0,r.kt)("h3",{id:"no-unneeded-ternary"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unneeded-ternary"},(0,r.kt)("inlineCode",{parentName:"a"},"no-unneeded-ternary"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Disallow all ternaries that can be simplified (",(0,r.kt)("inlineCode",{parentName:"li"},"defaultAssignment: false"),")")))),(0,r.kt)("p",null,"Don't use ternaries when you don't need to. Such cases include when the two branches are ",(0,r.kt)("inlineCode",{parentName:"p"},"true")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"false")," (use ",(0,r.kt)("inlineCode",{parentName:"p"},"Boolean()")," instead) and ",(0,r.kt)("inlineCode",{parentName:"p"},"x ? x : y")," (use ",(0,r.kt)("inlineCode",{parentName:"p"},"??")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"||")," instead)."),(0,r.kt)("h3",{id:"no-unsafe-negation"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unsafe-negation"},(0,r.kt)("inlineCode",{parentName:"a"},"no-unsafe-negation"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Disallow negations to be used in comparisons (",(0,r.kt)("inlineCode",{parentName:"li"},"enforceForOrderingRelations: true"),")")))),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"!")," has higher precedence than relational operators (",(0,r.kt)("inlineCode",{parentName:"p"},"in"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"instanceof"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"<"),", ",(0,r.kt)("inlineCode",{parentName:"p"},">"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"<="),", ",(0,r.kt)("inlineCode",{parentName:"p"},">="),"), so ",(0,r.kt)("inlineCode",{parentName:"p"},"!a instanceof b")," is always a bug because a boolean is never an instance of any constructor (unless in corner cases when ",(0,r.kt)("inlineCode",{parentName:"p"},"b")," has a ",(0,r.kt)("inlineCode",{parentName:"p"},"@@hasInstance")," method). Prettier will add parentheses to make it more obvious (",(0,r.kt)("inlineCode",{parentName:"p"},"(!a) instanceof b"),"), but ESLint will help you catch it before formatting."),(0,r.kt)("h2",{id:"assignment"},"Assignment"),(0,r.kt)("p",null,"The general principle for using assignment operators is to treat them as statements, not expressions. You should generally not rely on their return values, including in conditions, chained assignments, and return statements."),(0,r.kt)("h3",{id:"logical-assignment-operators"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/logical-assignment-operators"},(0,r.kt)("inlineCode",{parentName:"a"},"logical-assignment-operators"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Require all logical assignments to be used where possible (",(0,r.kt)("inlineCode",{parentName:"li"},'"always"'),")"),(0,r.kt)("li",{parentName:"ul"},"Require equivalent ",(0,r.kt)("inlineCode",{parentName:"li"},"if")," statements to be refactored to logical assignments (",(0,r.kt)("inlineCode",{parentName:"li"},"enforceForIfStatements: true"),")")))),(0,r.kt)("p",null,"This has the same motivation as ",(0,r.kt)("inlineCode",{parentName:"p"},"operator-assignment"),". Logical assignments also prevent unnecessary assignments\u2014if ",(0,r.kt)("inlineCode",{parentName:"p"},"a ??= b")," where ",(0,r.kt)("inlineCode",{parentName:"p"},"a")," is nullish, no assignment is made and no side effects are triggered."),(0,r.kt)("h3",{id:"no-cond-assign"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-cond-assign"},(0,r.kt)("inlineCode",{parentName:"a"},"no-cond-assign"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Always disallow assignments in conditions (",(0,r.kt)("inlineCode",{parentName:"li"},'"always"'),")")))),(0,r.kt)("p",null,"Assignments in conditionals are a common source of mistakes."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (res.status "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"404"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"Not found"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// res.status becomes 404"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (res.status "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"404"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"Not found"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// res.status becomes 404")))))),(0,r.kt)("p",null,"There is never a case where putting assignments in conditionals does not significantly subtract from readability."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"setHeight"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"node"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"HTMLElement"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," someNode "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," node;")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"do"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," someNode.style.height "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"100px"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"while"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ((someNode "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," someNode.parentNode));")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ First parse: this is an equality test?")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ Second parse: this is an assignment. Is that a mistake?")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ Third parse: oh, it's intended because of the extra brackets")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"setHeight"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"node"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"HTMLElement"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," someNode "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," node;")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"do"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," someNode.style.height "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"100px"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"while"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ((someNode "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," someNode.parentNode));")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ First parse: this is an equality test?")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ Second parse: this is an assignment. Is that a mistake?")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ Third parse: oh, it's intended because of the extra brackets")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("p",null,"Always write assignments as a separate statement:"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"setHeight"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"node"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"HTMLElement"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," someNode "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," node;")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"while"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (someNode) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," someNode.style.height "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"100px"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," someNode "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," someNode.parentNode;")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"setHeight"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"node"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"HTMLElement"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," someNode "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," node;")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"while"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (someNode) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," someNode.style.height "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"100px"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," someNode "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," someNode.parentNode;")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("p",null,"It also permits us to use ",(0,r.kt)("inlineCode",{parentName:"p"},"while")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"do-while"),", which is still a minor readability improvement."),(0,r.kt)("p",null,"There are some cases where assignments in conditionals are useful, such as to reduce code duplication:"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," input;")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"while"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ((input "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"getInput"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"())) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," input;")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"while"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ((input "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"getInput"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"())) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("p",null,"In such cases, you can either disable the rule, or use an explicit equality check (",(0,r.kt)("inlineCode",{parentName:"p"},"while ((input = getInput()) !== null)"),"). We don't make ESLint special-case this because Prettier automatically adds braces, which means it's not going to end up reporting anything."),(0,r.kt)("h3",{id:"no-multi-assign"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-multi-assign"},(0,r.kt)("inlineCode",{parentName:"a"},"no-multi-assign"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Disallow all multiple assignments (",(0,r.kt)("inlineCode",{parentName:"li"},'"ignoreNonDeclaration": false'),")")))),(0,r.kt)("p",null,"Do not chain assignments (",(0,r.kt)("inlineCode",{parentName:"p"},"a = b = c = 1"),'). This is because Prettier will add parentheses, which makes the assignment not a "chain" anyway. Write multiple lines instead.'),(0,r.kt)("h3",{id:"no-plusplus"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-plusplus"},(0,r.kt)("inlineCode",{parentName:"a"},"no-plusplus"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,"Use ",(0,r.kt)("inlineCode",{parentName:"p"},"a++")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"a += 1"),". It's shorter and more idiomatic. However, generally do not rely on the return value of ",(0,r.kt)("inlineCode",{parentName:"p"},"++"),"/",(0,r.kt)("inlineCode",{parentName:"p"},"--")," as it can be confusing."),(0,r.kt)("h3",{id:"no-return-assign"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-return-assign"},(0,r.kt)("inlineCode",{parentName:"a"},"no-return-assign"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Disallow all assignments in return statements (",(0,r.kt)("inlineCode",{parentName:"li"},'"always"'),")")))),(0,r.kt)("p",null,"Again, you should not rely on the return value of assignments. If you have something to assign to (",(0,r.kt)("inlineCode",{parentName:"p"},"foo = ..."),"), then just return it on a separate statement (",(0,r.kt)("inlineCode",{parentName:"p"},"return foo"),"). We don't use ",(0,r.kt)("inlineCode",{parentName:"p"},"except-parens")," because Prettier will add parentheses anyway."),(0,r.kt)("h3",{id:"no-self-assign"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-self-assign"},(0,r.kt)("inlineCode",{parentName:"a"},"no-self-assign"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Disallow all self-assignments (",(0,r.kt)("inlineCode",{parentName:"li"},'"props": true'),")")))),(0,r.kt)("p",null,"Self-assignments are usually a no-op. Self-assignment to properties could be no-op but the case where it's not is very confusing to readers. If your property accessor is not idempotent, you should probably refactor it. If this API comes from a library, use a comment."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"obj"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"get"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Math"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"random"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"set"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"value"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(value);")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"};")),(0,r.kt)("div",{parentName:"code",className:"line"}),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"obj.foo "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," obj.foo; "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ???"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"obj"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"get"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Math"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"random"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"set"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"value"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(value);")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")),(0,r.kt)("div",{parentName:"code",className:"line"}),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"obj.foo "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," obj.foo; "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ???")))))),(0,r.kt)("h3",{id:"operator-assignment"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/operator-assignment"},(0,r.kt)("inlineCode",{parentName:"a"},"operator-assignment"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Require all compound assignments to be used where possible (",(0,r.kt)("inlineCode",{parentName:"li"},'"always"'),")")))),(0,r.kt)("p",null,"Compound assignments enable you to write shorter code."),(0,r.kt)("h2",{id:"others"},"Others"),(0,r.kt)("h3",{id:"no-implicit-coercion"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-implicit-coercion"},(0,r.kt)("inlineCode",{parentName:"a"},"no-implicit-coercion"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Disallow all implicit coercions (",(0,r.kt)("inlineCode",{parentName:"li"},"boolean: false, number: false, string: false, allow: []"),")")))),(0,r.kt)("p",null,'Many "idioms" do not lead to correct or fool-proof code. The common case of ',(0,r.kt)("inlineCode",{parentName:"p"},'"" + x')," ",(0,r.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#string_coercion"},"is plain wrong"),". ",(0,r.kt)("inlineCode",{parentName:"p"},"+x")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"`${x}`")," are not as user-friendly as ",(0,r.kt)("inlineCode",{parentName:"p"},"Number(x)")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"String(x)")," because the former don't handle ",(0,r.kt)("inlineCode",{parentName:"p"},"BigInt")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"Symbol")," types, respectively. Always use the longer form for readability and for maximum safety."),(0,r.kt)("h3",{id:"no-sequences"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-sequences"},(0,r.kt)("inlineCode",{parentName:"a"},"no-sequences"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Don't use the comma operator unless in the updater of a ",(0,r.kt)("inlineCode",{parentName:"p"},"for")," loop. Write multiple expressions using multiple statements."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Don't use the comma operator just to make a concise arrow."),(0,r.kt)("li",{parentName:"ul"},"Don't use the comma operator to discard the ",(0,r.kt)("inlineCode",{parentName:"li"},"this")," binding; use the ",(0,r.kt)("inlineCode",{parentName:"li"},"call")," method instead."),(0,r.kt)("li",{parentName:"ul"},"Don't use the comma operator to trigger indirect ",(0,r.kt)("inlineCode",{parentName:"li"},"eval")," (do you really need ",(0,r.kt)("inlineCode",{parentName:"li"},"eval"),"?). Use ",(0,r.kt)("inlineCode",{parentName:"li"},"eval?.()")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"Function")," instead.")),(0,r.kt)("h3",{id:"no-void"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-void"},(0,r.kt)("inlineCode",{parentName:"a"},"no-void"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Allow ",(0,r.kt)("inlineCode",{parentName:"li"},"void")," as expression statements (",(0,r.kt)("inlineCode",{parentName:"li"},"allowAsStatement: true"),")")))),(0,r.kt)("p",null,"Generally, ",(0,r.kt)("inlineCode",{parentName:"p"},"void")," operators are not needed. We don't need to use ",(0,r.kt)("inlineCode",{parentName:"p"},"void")," to signify that we are discarding the return value; for example, in arrow functions, we can just be more explicit by expanding the arrow function body. However, we allow ",(0,r.kt)("inlineCode",{parentName:"p"},"void")," as a statement because ",(0,r.kt)("inlineCode",{parentName:"p"},"@typescript-eslint/no-floating-promises")," requires it to explicitly discard promises."),(0,r.kt)("h3",{id:"valid-typeof"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/valid-typeof"},(0,r.kt)("inlineCode",{parentName:"a"},"valid-typeof"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Do not allow comparing to anything other than string literals or another ",(0,r.kt)("inlineCode",{parentName:"li"},"typeof")," (",(0,r.kt)("inlineCode",{parentName:"li"},"requireStringLiterals: true"),")")))),(0,r.kt)("p",null,"You should only compare ",(0,r.kt)("inlineCode",{parentName:"p"},"typeof")," to string literals. ",(0,r.kt)("inlineCode",{parentName:"p"},"typeof x === typeof y")," is also considered a valid pattern. Other cases, such as saving the result of ",(0,r.kt)("inlineCode",{parentName:"p"},"typeof")," to a variable, are too niche and not allowed by default by this rule, but you can disable the rule in that case."),(0,r.kt)("p",null,"Note that TypeScript disallows certain but not all invalid comparisons."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"declare"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"unknown"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"declare"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const type: string"},"type")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"str"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("span",{parentName:"code",className:"error"},(0,r.kt)("span",{parentName:"span"},'This comparison appears to be unintentional because the types \'"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"\' and \'"str"\' have no overlap.'),(0,r.kt)("span",{parentName:"span",className:"code"},"2367")),(0,r.kt)("span",{parentName:"code",className:"error-behind"},'This comparison appears to be unintentional because the types \'"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"\' and \'"str"\' have no overlap.'),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("span",{parentName:"code",className:"error"},(0,r.kt)("span",{parentName:"span"},"This comparison appears to be unintentional because the types 'string' and 'number' have no overlap."),(0,r.kt)("span",{parentName:"span",className:"code"},"2367")),(0,r.kt)("span",{parentName:"code",className:"error-behind"},"This comparison appears to be unintentional because the types 'string' and 'number' have no overlap."),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"var undefined"},"undefined")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Valid ???")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const type: string"},"type"),";"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"declare"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"unknown"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"declare"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const type: string"},"type")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"str"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("span",{parentName:"code",className:"error"},(0,r.kt)("span",{parentName:"span"},'This comparison appears to be unintentional because the types \'"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"\' and \'"str"\' have no overlap.'),(0,r.kt)("span",{parentName:"span",className:"code"},"2367")),(0,r.kt)("span",{parentName:"code",className:"error-behind"},'This comparison appears to be unintentional because the types \'"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"\' and \'"str"\' have no overlap.'),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("span",{parentName:"code",className:"error"},(0,r.kt)("span",{parentName:"span"},"This comparison appears to be unintentional because the types 'string' and 'number' have no overlap."),(0,r.kt)("span",{parentName:"span",className:"code"},"2367")),(0,r.kt)("span",{parentName:"code",className:"error-behind"},"This comparison appears to be unintentional because the types 'string' and 'number' have no overlap."),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"var undefined"},"undefined")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Valid ???")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const x: unknown"},"x")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const type: string"},"type"),";")))))))}c.isMDXComponent=!0},5318:(e,a,t)=>{t.d(a,{Zo:()=>d,kt:()=>k});var n=t(7378);function r(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function s(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function l(e){for(var a=1;a=0||(r[t]=e[t]);return r}(e,a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var i=n.createContext({}),p=function(e){var a=n.useContext(i),t=a;return e&&(t="function"==typeof e?e(a):l(l({},a),e)),t},d=function(e){var a=p(e.components);return n.createElement(i.Provider,{value:a},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},N=n.forwardRef((function(e,a){var t=e.components,r=e.mdxType,s=e.originalType,i=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),m=p(t),N=r,k=m["".concat(i,".").concat(N)]||m[N]||c[N]||s;return t?n.createElement(k,l(l({ref:a},d),{},{components:t})):n.createElement(k,l({ref:a},d))}));function k(e,a){var t=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var s=t.length,l=new Array(s);l[0]=N;var o={};for(var i in a)hasOwnProperty.call(a,i)&&(o[i]=a[i]);o.originalType=e,o[m]="string"==typeof e?e:r,l[1]=o;for(var p=2;p{n.d(a,{xA:()=>y,yg:()=>g});var t=n(3696);function r(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function l(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var a=1;a=0||(r[n]=e[n]);return r}(e,a);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=t.createContext({}),i=function(e){var a=t.useContext(p),n=a;return e&&(n="function"==typeof e?e(a):s(s({},a),e)),n},y=function(e){var a=i(e.components);return t.createElement(p.Provider,{value:a},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},c=t.forwardRef((function(e,a){var n=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,y=o(e,["components","mdxType","originalType","parentName"]),d=i(n),c=r,g=d["".concat(p,".").concat(c)]||d[c]||m[c]||l;return n?t.createElement(g,s(s({ref:a},y),{},{components:n})):t.createElement(g,s({ref:a},y))}));function g(e,a){var n=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var l=n.length,s=new Array(l);s[0]=c;var o={};for(var p in a)hasOwnProperty.call(a,p)&&(o[p]=a[p]);o.originalType=e,o[d]="string"==typeof e?e:r,s[1]=o;for(var i=2;i{n.r(a),n.d(a,{assets:()=>p,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>o,toc:()=>i});var t=n(8102),r=(n(3696),n(9916));const l={sidebar_position:3},s="TypeScript",o={unversionedId:"typescript/base",id:"typescript/base",title:"TypeScript",description:"Types",source:"@site/../docs/typescript/base.md",sourceDirName:"typescript",slug:"/typescript/base",permalink:"/js-style-guide/typescript/base",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"defaultSidebar",previous:{title:"typescript-eslint rules",permalink:"/js-style-guide/typescript/"},next:{title:"Type-checked ESLint rules",permalink:"/js-style-guide/typescript/type-checked"}},p={},i=[{value:"Types",id:"types",level:2},{value:"array-type",id:"array-type",level:3},{value:"ban-types",id:"ban-types",level:3},{value:"consistent-indexed-object-style",id:"consistent-indexed-object-style",level:3},{value:"method-signature-style",id:"method-signature-style",level:3},{value:"no-explicit-any",id:"no-explicit-any",level:3},{value:"no-invalid-void-type",id:"no-invalid-void-type",level:3},{value:"no-misused-new",id:"no-misused-new",level:3},{value:"prefer-function-type",id:"prefer-function-type",level:3},{value:"Type/value declarations",id:"typevalue-declarations",level:2},{value:"consistent-type-definitions",id:"consistent-type-definitions",level:3},{value:"init-declarations",id:"init-declarations",level:3},{value:"no-empty-interface",id:"no-empty-interface",level:3},{value:"no-redeclare",id:"no-redeclare",level:3},{value:"no-shadow",id:"no-shadow",level:3},{value:"no-unused-vars",id:"no-unused-vars",level:3},{value:"no-use-before-define",id:"no-use-before-define",level:3},{value:"Functions",id:"functions",level:2},{value:"adjacent-overload-signatures",id:"adjacent-overload-signatures",level:3},{value:"default-param-last",id:"default-param-last",level:3},{value:"no-invalid-this",id:"no-invalid-this",level:3},{value:"unified-signatures",id:"unified-signatures",level:3},{value:"Generics",id:"generics",level:2},{value:"consistent-generic-constructors",id:"consistent-generic-constructors",level:3},{value:"no-array-constructor",id:"no-array-constructor",level:3},{value:"no-unnecessary-type-constraint",id:"no-unnecessary-type-constraint",level:3},{value:"no-unused-expressions",id:"no-unused-expressions",level:3},{value:"Classes",id:"classes",level:2},{value:"class-literal-property-style",id:"class-literal-property-style",level:3},{value:"explicit-member-accessibility",id:"explicit-member-accessibility",level:3},{value:"no-dupe-class-members",id:"no-dupe-class-members",level:3},{value:"no-extraneous-class",id:"no-extraneous-class",level:3},{value:"parameter-properties",id:"parameter-properties",level:3},{value:"Enums",id:"enums",level:2},{value:"prefer-enum-initializers",id:"prefer-enum-initializers",level:3},{value:"prefer-literal-enum-member",id:"prefer-literal-enum-member",level:3},{value:"Namespaces",id:"namespaces",level:2},{value:"no-namespace",id:"no-namespace",level:3},{value:"prefer-namespace-keyword",id:"prefer-namespace-keyword",level:3},{value:"Imports",id:"imports",level:2},{value:"consistent-type-imports",id:"consistent-type-imports",level:3},{value:"no-import-type-side-effects",id:"no-import-type-side-effects",level:3},{value:"no-require-imports",id:"no-require-imports",level:3},{value:"no-var-requires",id:"no-var-requires",level:3},{value:"Exports",id:"exports",level:2},{value:"no-useless-empty-export",id:"no-useless-empty-export",level:3},{value:"Type annotations",id:"type-annotations",level:2},{value:"explicit-function-return-type",id:"explicit-function-return-type",level:3},{value:"explicit-module-boundary-types",id:"explicit-module-boundary-types",level:3},{value:"typedef",id:"typedef",level:3},{value:"Type assertions",id:"type-assertions",level:2},{value:"consistent-type-assertions",id:"consistent-type-assertions",level:3},{value:"no-confusing-non-null-assertion",id:"no-confusing-non-null-assertion",level:3},{value:"no-extra-non-null-assertion",id:"no-extra-non-null-assertion",level:3},{value:"no-non-null-asserted-nullish-coalescing",id:"no-non-null-asserted-nullish-coalescing",level:3},{value:"no-non-null-asserted-optional-chain",id:"no-non-null-asserted-optional-chain",level:3},{value:"no-non-null-assertion",id:"no-non-null-assertion",level:3},{value:"prefer-as-const",id:"prefer-as-const",level:3},{value:"TS comments",id:"ts-comments",level:2},{value:"ban-ts-comment",id:"ban-ts-comment",level:3},{value:"prefer-ts-expect-error",id:"prefer-ts-expect-error",level:3},{value:"triple-slash-reference",id:"triple-slash-reference",level:3},{value:"Plain JavaScript",id:"plain-javascript",level:2},{value:"no-dynamic-delete",id:"no-dynamic-delete",level:3},{value:"no-this-alias",id:"no-this-alias",level:3},{value:"prefer-for-of",id:"prefer-for-of",level:3}],y={toc:i},d="wrapper";function m(e){let{components:a,...n}=e;return(0,r.yg)(d,(0,t.A)({},y,n,{components:a,mdxType:"MDXLayout"}),(0,r.yg)("h1",{id:"typescript"},"TypeScript"),(0,r.yg)("h2",{id:"types"},"Types"),(0,r.yg)("h3",{id:"array-type"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/array-type"},(0,r.yg)("inlineCode",{parentName:"a"},"array-type"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Require ",(0,r.yg)("inlineCode",{parentName:"li"},"T[]")," syntax (",(0,r.yg)("inlineCode",{parentName:"li"},'default: "array"'),")")))),(0,r.yg)("p",null,"We require ",(0,r.yg)("inlineCode",{parentName:"p"},"T[]")," syntax for arrays. This is a matter of consistency. Even for very, very complex types, we still require putting ",(0,r.yg)("inlineCode",{parentName:"p"},"[]")," at the end, instead of using ",(0,r.yg)("inlineCode",{parentName:"p"},"Array<>"),". If the rule provides more customization, such as allowing ",(0,r.yg)("inlineCode",{parentName:"p"},"(T | U)[]"),", we may reconsider."),(0,r.yg)("h3",{id:"ban-types"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/ban-types"},(0,r.yg)("inlineCode",{parentName:"a"},"ban-types"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Extend defaults (",(0,r.yg)("inlineCode",{parentName:"li"},"extendDefaults: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Unban ",(0,r.yg)("inlineCode",{parentName:"li"},"{}")," (",(0,r.yg)("inlineCode",{parentName:"li"},'types: { "{}": false }'),")")))),(0,r.yg)("p",null,"The types listed in the default options are either dangerous or misleading. The only exception is ",(0,r.yg)("inlineCode",{parentName:"p"},"{}"),", which in our eyes is safe to use. It may not behave as one expects, but it doesn't hinder type safety. It is also used by TypeScript in utility types."),(0,r.yg)("h3",{id:"consistent-indexed-object-style"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/consistent-indexed-object-style"},(0,r.yg)("inlineCode",{parentName:"a"},"consistent-indexed-object-style"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Require ",(0,r.yg)("inlineCode",{parentName:"li"},"{ [key: string]: T }")," syntax (",(0,r.yg)("inlineCode",{parentName:"li"},'"index-signature"'),")")))),(0,r.yg)("p",null,"Always use the index signature syntax. It's not much longer:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"type"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," { ["),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"x"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"]"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"T"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," };")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"type"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"B"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"Record"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"T"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},">;"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"type"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { ["),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"x"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"]"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"T"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," };")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"type"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"B"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"Record"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"T"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},">;")))))),(0,r.yg)("p",null,"But it allows annotating the semantics of the key. Always use a descriptive name, such as ",(0,r.yg)("inlineCode",{parentName:"p"},"{ [url: string]: JSX.Element }"),"."),(0,r.yg)("h3",{id:"method-signature-style"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/method-signature-style"},(0,r.yg)("inlineCode",{parentName:"a"},"method-signature-style"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Require ",(0,r.yg)("inlineCode",{parentName:"li"},"foo: () => T")," syntax (",(0,r.yg)("inlineCode",{parentName:"li"},'"property"'),")")))),(0,r.yg)("p",null,"The property syntax is strictly more type-safe. See the rule docs for more information. One exception allowed is when adding types for library methods, such as when polyfilling. This is because the lib declarations use methods anyway."),(0,r.yg)("h3",{id:"no-explicit-any"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-explicit-any"},(0,r.yg)("inlineCode",{parentName:"a"},"no-explicit-any"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: warning")),(0,r.yg)("p",null,"Never use ",(0,r.yg)("inlineCode",{parentName:"p"},"any"),". If you trace the assignability of your types carefully, you should always be able to find a suitable type. Only able to use ",(0,r.yg)("inlineCode",{parentName:"p"},"any")," is a sign of overcomplicated API design. It is only set to warning because we acknowledge the necessity of ",(0,r.yg)("inlineCode",{parentName:"p"},"any"),", such as when indexing an unknown object."),(0,r.yg)("h3",{id:"no-invalid-void-type"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-invalid-void-type"},(0,r.yg)("inlineCode",{parentName:"a"},"no-invalid-void-type"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: warning"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Do not allow ",(0,r.yg)("inlineCode",{parentName:"li"},"void")," as ",(0,r.yg)("inlineCode",{parentName:"li"},"this")," (",(0,r.yg)("inlineCode",{parentName:"li"},"allowAsThisParameter: false"),")"),(0,r.yg)("li",{parentName:"ul"},"Allow ",(0,r.yg)("inlineCode",{parentName:"li"},"void")," in generic type arguments (",(0,r.yg)("inlineCode",{parentName:"li"},"allowInGenericTypeArguments: true"),")")))),(0,r.yg)("p",null,"Only use ",(0,r.yg)("inlineCode",{parentName:"p"},"void")," as the return type of functions. In other places, ",(0,r.yg)("inlineCode",{parentName:"p"},"void")," behaves like ",(0,r.yg)("inlineCode",{parentName:"p"},"unknown")," and is not type safe. We allow ",(0,r.yg)("inlineCode",{parentName:"p"},"void")," in generic type arguments because it is useful for ",(0,r.yg)("inlineCode",{parentName:"p"},"Promise"),". However, do not write ",(0,r.yg)("inlineCode",{parentName:"p"},"this: void"),"\u2014if you don't care about the ",(0,r.yg)("inlineCode",{parentName:"p"},"this")," value, just omit the ",(0,r.yg)("inlineCode",{parentName:"p"},"this")," parameter."),(0,r.yg)("h3",{id:"no-misused-new"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-misused-new"},(0,r.yg)("inlineCode",{parentName:"a"},"no-misused-new"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Do not declare a method called ",(0,r.yg)("inlineCode",{parentName:"p"},"new")," in a class. Do not declare a method called ",(0,r.yg)("inlineCode",{parentName:"p"},"constructor")," in an interface. This is probably a mistake and you meant to declare a constructor in both cases."),(0,r.yg)("h3",{id:"prefer-function-type"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/prefer-function-type"},(0,r.yg)("inlineCode",{parentName:"a"},"prefer-function-type"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Use ",(0,r.yg)("inlineCode",{parentName:"p"},"type Foo = () => T")," instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"interface Foo { (): T }"),". The former is more readable while the latter may be simply due to missing a property name. If you want to make an augmentable callable type, use a disable comment."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"interface"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"Plugin"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"ast"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"AST"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},")"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"AST"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// User code")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"interface"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"Plugin"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"extension1"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"MyExtension"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"interface"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"Plugin"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"ast"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"AST"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},")"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"AST"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// User code")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"interface"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"Plugin"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"extension1"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"MyExtension"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h2",{id:"typevalue-declarations"},"Type/value declarations"),(0,r.yg)("h3",{id:"consistent-type-definitions"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/consistent-type-definitions"},(0,r.yg)("inlineCode",{parentName:"a"},"consistent-type-definitions"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"We don't mind whether ",(0,r.yg)("inlineCode",{parentName:"p"},"interface")," or ",(0,r.yg)("inlineCode",{parentName:"p"},"type")," is used. Generally:"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Use ",(0,r.yg)("inlineCode",{parentName:"li"},"interface")," for public APIs that are extendable so that users may be able to declaration-merge."),(0,r.yg)("li",{parentName:"ul"},"Use ",(0,r.yg)("inlineCode",{parentName:"li"},"interface")," for large object types."),(0,r.yg)("li",{parentName:"ul"},"Use ",(0,r.yg)("inlineCode",{parentName:"li"},"type")," for convenience types that are small.")),(0,r.yg)("h3",{id:"init-declarations"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/init-declarations"},(0,r.yg)("inlineCode",{parentName:"a"},"init-declarations"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Require variables to be initialized (",(0,r.yg)("inlineCode",{parentName:"li"},'"always"'),")"))),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/js-style-guide/eslint-base/variables-names#init-declarations"},(0,r.yg)("inlineCode",{parentName:"a"},"init-declarations")))))),(0,r.yg)("p",null,"See the base rule for more information. This extension rule prevents false positives for TypeScript-specific syntax so it is safe to use in JavaScript files too."),(0,r.yg)("h3",{id:"no-empty-interface"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-empty-interface"},(0,r.yg)("inlineCode",{parentName:"a"},"no-empty-interface"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Allow extended interfaces to be empty (",(0,r.yg)("inlineCode",{parentName:"li"},"allowSingleExtends: true"),")")))),(0,r.yg)("p",null,"Empty interfaces are a form of ",(0,r.yg)("inlineCode",{parentName:"p"},"{}"),", which match any non-nullish type. However, we allow ",(0,r.yg)("inlineCode",{parentName:"p"},"interface X extends Y {}")," as a way to alias interfaces, because then we can declaration-merge ",(0,r.yg)("inlineCode",{parentName:"p"},"X"),"."),(0,r.yg)("h3",{id:"no-redeclare"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-redeclare"},(0,r.yg)("inlineCode",{parentName:"a"},"no-redeclare"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Allow declaration merging (",(0,r.yg)("inlineCode",{parentName:"li"},"ignoreDeclarationMerge: true"),")"))),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/js-style-guide/eslint-base/variables-names#no-redeclare"},(0,r.yg)("inlineCode",{parentName:"a"},"no-redeclare")))))),(0,r.yg)("p",null,"This reduces the errors reported by the base rule. It is safe to use in JavaScript files because it does not change behaviors outside of TypeScript."),(0,r.yg)("p",null,'We allow "declaration merging" between variables and types:'),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"User"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," z."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"object"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"({});")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"type"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"User"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"z"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"infer"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," User>;"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"User"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," z."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"object"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"({});")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"type"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"User"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"z"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"infer"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," User>;")))))),(0,r.yg)("p",null,"If the rule reports for this case and it really makes sense, you can disable the rule for that line. (",(0,r.yg)("a",{parentName:"p",href:"https://github.com/typescript-eslint/typescript-eslint/issues/6441"},"typescript-eslint/typescript-eslint#6441"),")"),(0,r.yg)("h3",{id:"no-shadow"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-shadow"},(0,r.yg)("inlineCode",{parentName:"a"},"no-shadow"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: warning"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Ignore type declarations and value declarations shadowing each other (",(0,r.yg)("inlineCode",{parentName:"li"},"ignoreTypeValueShadowing: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Do not allow function type parameter name to shadow another variable (",(0,r.yg)("inlineCode",{parentName:"li"},"ignoreFunctionTypeParameterNameValueShadow: false"),")")))),(0,r.yg)("p",null,"We allow type declarations and value declarations to shadow each other. This is because they are in different namespaces and you always access each one with a different syntax. However, a function parameter name always lives in value space even when it belongs in a type, so we don't allow it to shadow another variable."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"test"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"type"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"Func"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"test"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," test; "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// What is `test` here?"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"test"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"type"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"Func"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"test"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," test; "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// What is `test` here?")))))),(0,r.yg)("p",null,"This rule is safe to use in JavaScript files because it does not change behaviors outside of TypeScript."),(0,r.yg)("h3",{id:"no-unused-vars"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-unused-vars"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unused-vars"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/js-style-guide/eslint-base/variables-names#no-unused-vars"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unused-vars")))))),(0,r.yg)("p",null,"See the base rule for more information. This extension rule adds support for TypeScript-specific syntax so it is safe to use in JavaScript files too."),(0,r.yg)("h3",{id:"no-use-before-define"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-use-before-define"},(0,r.yg)("inlineCode",{parentName:"a"},"no-use-before-define"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: warning"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Check use-before-define enums (",(0,r.yg)("inlineCode",{parentName:"li"},"enums: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Allow referencing anything in type space (",(0,r.yg)("inlineCode",{parentName:"li"},"ignoreTypeReferences: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Allow all type declarations to be hoisted (",(0,r.yg)("inlineCode",{parentName:"li"},"typedefs: false"),")")))),(0,r.yg)("p",null,"See the base rule for more information. Because types behave like functions, they are safe to be referenced everywhere. However, when enums are used as values, they are not hoisted. This is also checked by TypeScript."),(0,r.yg)("h2",{id:"functions"},"Functions"),(0,r.yg)("h3",{id:"adjacent-overload-signatures"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/adjacent-overload-signatures"},(0,r.yg)("inlineCode",{parentName:"a"},"adjacent-overload-signatures"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"We require overload signatures to be adjacent to each other. This makes the signatures of functions easier to read. Note that the rule has a known bug: ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/typescript-eslint/typescript-eslint/issues/4576"},"typescript-eslint/typescript-eslint#4576"),"."),(0,r.yg)("h3",{id:"default-param-last"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/default-param-last"},(0,r.yg)("inlineCode",{parentName:"a"},"default-param-last"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Disabled in JavaScript"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/js-style-guide/eslint-base/functions#default-param-last"},(0,r.yg)("inlineCode",{parentName:"a"},"default-param-last")))))),(0,r.yg)("p",null,"We disable the base rule but enable the TypeScript version. In TypeScript files, we require default parameters to be at the end of the parameter list. This is because required parameters must be passed values, so optional parameters before them have no effect and should just have ",(0,r.yg)("inlineCode",{parentName:"p"},"| undefined")," in their types. In JavaScript, we don't require this because it is not possible to indicate optionality except through default values."),(0,r.yg)("h3",{id:"no-invalid-this"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-invalid-this"},(0,r.yg)("inlineCode",{parentName:"a"},"no-invalid-this"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/js-style-guide/eslint-base/functions#no-invalid-this"},(0,r.yg)("inlineCode",{parentName:"a"},"no-invalid-this")))))),(0,r.yg)("p",null,"Even in TypeScript files, we don't need this rule, because this rule falls into a dilemma:"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"In TypeScript files, its utility clashes exactly with the TypeScript compiler if one adds the ",(0,r.yg)("inlineCode",{parentName:"li"},"this")," parameter anyway;"),(0,r.yg)("li",{parentName:"ul"},"In JavaScript files, it does not prevent any additional false positives.")),(0,r.yg)("h3",{id:"unified-signatures"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/unified-signatures"},(0,r.yg)("inlineCode",{parentName:"a"},"unified-signatures"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: warning"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Do not allow differently named parameters as distinct overloads (",(0,r.yg)("inlineCode",{parentName:"li"},"ignoreDifferentlyNamedParameters: false"),")")))),(0,r.yg)("p",null,"You should only use overloads to associate input with output, or associate multiple inputs. Combine signatures as much as possible, because doing so allows passing a union."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function doSomething(id: number): void (+1 overload)"},"doSomething")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) id: number"},"id")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},")"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"void"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function doSomething(ids: number[]): void (+1 overload)"},"doSomething")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) ids: number[]"},"ids")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"[])"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"void"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function doSomething(id: number): void (+1 overload)"},"doSomething")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) ids: number | number[]"},"ids")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"[])"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"void"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"declare"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const maybeIds: number | number[]"},"maybeIds")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"[];")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function doSomething(id: number): void (+1 overload)"},"doSomething")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.yg)("data-err",{parentName:"span"},(0,r.yg)("data-lsp",{parentName:"data-err",lsp:"const maybeIds: number | number[]"},"maybeIds")),"); "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Error")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"No overload matches this call.\n Overload 1 of 2, '(id: number): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number'.\n Type 'number[]' is not assignable to type 'number'.\n Overload 2 of 2, '(ids: number[]): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number[]'.\n Type 'number' is not assignable to type 'number[]'."),(0,r.yg)("span",{parentName:"span",className:"code"},"2769")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"No overload matches this call.\n Overload 1 of 2, '(id: number): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number'.\n Type 'number[]' is not assignable to type 'number'.\n Overload 2 of 2, '(ids: number[]): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number[]'.\n Type 'number' is not assignable to type 'number[]'.")))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function doSomething(id: number): void (+1 overload)"},"doSomething")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) id: number"},"id")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},")"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"void"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function doSomething(ids: number[]): void (+1 overload)"},"doSomething")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) ids: number[]"},"ids")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[])"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"void"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function doSomething(id: number): void (+1 overload)"},"doSomething")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) ids: number | number[]"},"ids")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[])"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"void"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"declare"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const maybeIds: number | number[]"},"maybeIds")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[];")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function doSomething(id: number): void (+1 overload)"},"doSomething")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.yg)("data-err",{parentName:"span"},(0,r.yg)("data-lsp",{parentName:"data-err",lsp:"const maybeIds: number | number[]"},"maybeIds")),"); "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Error")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"No overload matches this call.\n Overload 1 of 2, '(id: number): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number'.\n Type 'number[]' is not assignable to type 'number'.\n Overload 2 of 2, '(ids: number[]): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number[]'.\n Type 'number' is not assignable to type 'number[]'."),(0,r.yg)("span",{parentName:"span",className:"code"},"2769")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"No overload matches this call.\n Overload 1 of 2, '(id: number): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number'.\n Type 'number[]' is not assignable to type 'number'.\n Overload 2 of 2, '(ids: number[]): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number[]'.\n Type 'number' is not assignable to type 'number[]'."))))),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function doSomething(ids: number | number[]): void"},"doSomething")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) ids: number | number[]"},"ids")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"[])"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"void"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"declare"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const maybeIds: number | number[]"},"maybeIds")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"[];")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function doSomething(ids: number | number[]): void"},"doSomething")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const maybeIds: number | number[]"},"maybeIds"),"); "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Error"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function doSomething(ids: number | number[]): void"},"doSomething")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) ids: number | number[]"},"ids")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[])"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"void"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"declare"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const maybeIds: number | number[]"},"maybeIds")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[];")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function doSomething(ids: number | number[]): void"},"doSomething")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const maybeIds: number | number[]"},"maybeIds"),"); "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Error")))))),(0,r.yg)("p",null,"In case the two overloads have very distinct semantics, name the parameter as ",(0,r.yg)("inlineCode",{parentName:"p"},"lengthOrElement")," instead of creating two overloads with different names."),(0,r.yg)("h2",{id:"generics"},"Generics"),(0,r.yg)("h3",{id:"consistent-generic-constructors"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/consistent-generic-constructors"},(0,r.yg)("inlineCode",{parentName:"a"},"consistent-generic-constructors"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Require ",(0,r.yg)("inlineCode",{parentName:"li"},"new Foo()")," syntax (",(0,r.yg)("inlineCode",{parentName:"li"},'"constructor"'),")")))),(0,r.yg)("p",null,"Use ",(0,r.yg)("inlineCode",{parentName:"p"},"const foo = new Foo()")," instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"const foo: Foo = new Foo()"),". It is shorter and less prone to refactoring."),(0,r.yg)("h3",{id:"no-array-constructor"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-array-constructor"},(0,r.yg)("inlineCode",{parentName:"a"},"no-array-constructor"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/js-style-guide/eslint-base/collections#no-array-constructor"},(0,r.yg)("inlineCode",{parentName:"a"},"no-array-constructor")))))),(0,r.yg)("p",null,"We never allow the ",(0,r.yg)("inlineCode",{parentName:"p"},"Array")," constructor. Even in TypeScript, use ",(0,r.yg)("inlineCode",{parentName:"p"},"[] as T[]")," instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"Array()"),"."),(0,r.yg)("h3",{id:"no-unnecessary-type-constraint"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-unnecessary-type-constraint"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unnecessary-type-constraint"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Do not write ",(0,r.yg)("inlineCode",{parentName:"p"},"T extends unknown")," or ",(0,r.yg)("inlineCode",{parentName:"p"},"T extends any"),". They are completely redundant as of the latest TS version (",(0,r.yg)("inlineCode",{parentName:"p"},"T extends unknown")," may not be in older versions when generic types were non-nullable by default)."),(0,r.yg)("h3",{id:"no-unused-expressions"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-unused-expressions"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unused-expressions"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/js-style-guide/eslint-base/control-flow#no-unused-expressions"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unused-expressions")))))),(0,r.yg)("p",null,"See the base rule for more information. This extension rule is useful for TypeScript because it adds support for instantiation expressions. It is safe to use in JavaScript files because it does not change behaviors outside of TypeScript."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"foo"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"<"),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"T"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},">"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"foo"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"<"),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"T"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},">"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")))))),(0,r.yg)("h2",{id:"classes"},"Classes"),(0,r.yg)("h3",{id:"class-literal-property-style"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/class-literal-property-style"},(0,r.yg)("inlineCode",{parentName:"a"},"class-literal-property-style"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: warning"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Require using getters for readonly fields (",(0,r.yg)("inlineCode",{parentName:"li"},'"getters"'),")")))),(0,r.yg)("p",null,"We require using getters for readonly fields."),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"readonly")," only provides safety in TypeScript but does not interface well with JavaScript."),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"readonly")," cannot be declared in JavaScript, so enforcing ",(0,r.yg)("inlineCode",{parentName:"li"},'"fields"')," may lead to unfixable errors in JavaScript."),(0,r.yg)("li",{parentName:"ul"},"Getters can be overridden in subclasses while fields may accidentally override subclass getters.")),(0,r.yg)("p",null,"Note that our ",(0,r.yg)("a",{parentName:"p",href:"/js-style-guide/eslint-base/objects-classes#accessor-pairs"},(0,r.yg)("inlineCode",{parentName:"a"},"accessor-pairs"))," rule requires every getter to have an accompanying setter. You may want to disable this in TypeScript to achieve compile-time readonliness."),(0,r.yg)("h3",{id:"explicit-member-accessibility"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/explicit-member-accessibility"},(0,r.yg)("inlineCode",{parentName:"a"},"explicit-member-accessibility"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"Never annotate member accessibility. If you want private members, use ",(0,r.yg)("inlineCode",{parentName:"p"},"#")," instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"private"),". Public fields are allowed and not discouraged or unfavored over accessors."),(0,r.yg)("h3",{id:"no-dupe-class-members"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-dupe-class-members"},(0,r.yg)("inlineCode",{parentName:"a"},"no-dupe-class-members"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/js-style-guide/eslint-base/objects-classes#no-dupe-class-members"},(0,r.yg)("inlineCode",{parentName:"a"},"no-dupe-class-members")))))),(0,r.yg)("p",null,"This rule overrides the base rule to allow overloads. It is safe to use in JavaScript files because it does not change behaviors outside of TypeScript."),(0,r.yg)("h3",{id:"no-extraneous-class"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-extraneous-class"},(0,r.yg)("inlineCode",{parentName:"a"},"no-extraneous-class"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: warning"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Do not allow classes with only constructors (",(0,r.yg)("inlineCode",{parentName:"li"},"allowConstructorOnly: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Do not allow empty classes (",(0,r.yg)("inlineCode",{parentName:"li"},"allowEmpty true"),")"),(0,r.yg)("li",{parentName:"ul"},"Do not allow classes with only static members (",(0,r.yg)("inlineCode",{parentName:"li"},"allowStaticOnly: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Do not allow classes with decorators (",(0,r.yg)("inlineCode",{parentName:"li"},"allowWithDecorator: true"),")")))),(0,r.yg)("p",null,"You should not use classes as namespaces. All classes should have at least one ",(0,r.yg)("em",{parentName:"p"},"method"),", because if it only contains fields, a factory function is probably better. Also consider whether the style of utility functions + data is better than a class."),(0,r.yg)("p",null,"Note that in JavaScript you may have false positives:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"js"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},".a "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"js"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".a "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("p",null,"You should not do this in JavaScript. Add a field declaration to make the class statically analyzable\u2014this helps with performance by preventing unnecessary hidden class transitions."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"js"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},".a "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"js"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".a "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h3",{id:"parameter-properties"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/parameter-properties"},(0,r.yg)("inlineCode",{parentName:"a"},"parameter-properties"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: warning"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Always use class properties (",(0,r.yg)("inlineCode",{parentName:"li"},'prefer: "class-property"'),")"),(0,r.yg)("li",{parentName:"ul"},"Allow no exceptions (",(0,r.yg)("inlineCode",{parentName:"li"},"allow: []"),")")))),(0,r.yg)("p",null,"Don't use parameter properties because they don't save many characters but are non-standard. Different TypeScript versions may change the instantiation order and subtly break your code."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"b"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},".a; "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Will this work?")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"public"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {}")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"B"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"b"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},".a "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," a;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},".b "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," a; "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// This will work")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"b"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".a; "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Will this work?")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"public"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {}")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"B"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"b"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".a "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".b "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a; "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// This will work")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h2",{id:"enums"},"Enums"),(0,r.yg)("h3",{id:"prefer-enum-initializers"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/prefer-enum-initializers"},(0,r.yg)("inlineCode",{parentName:"a"},"prefer-enum-initializers"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Always use initializers for enum members. Without initializers, you may subtly break consumers' code if they rely on the exact value of each member."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"diff"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"enum Rights {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#116329"}},"+ NONE,")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," USER,")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ADMIN,")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"if (user.right === 1) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," // Before: user rights")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," // Now: no rights")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"diff"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"enum Rights {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"+ NONE,")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," USER,")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ADMIN,")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"if (user.right === 1) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," // Before: user rights")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," // Now: no rights")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h3",{id:"prefer-literal-enum-member"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/prefer-literal-enum-member"},(0,r.yg)("inlineCode",{parentName:"a"},"prefer-literal-enum-member"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: warning"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Allow bitwise enum members (",(0,r.yg)("inlineCode",{parentName:"li"},"allowBitwiseExpressions: true"),")")))),(0,r.yg)("p",null,"Using non-literal members is confusing because people may not expect enums to create naming scopes. If you want to declare enums depending on other variables, consider a namespace instead. We allow bitwise enum members because they are useful for flags."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"enum"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"Flags"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," A "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"<<"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," B "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"<<"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," C "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"<<"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"enum"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"Flags"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," A "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"<<"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," B "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"<<"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," C "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"<<"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h2",{id:"namespaces"},"Namespaces"),(0,r.yg)("h3",{id:"no-namespace"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-namespace"},(0,r.yg)("inlineCode",{parentName:"a"},"no-namespace"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"We don't forbid namespaces. We think they enable interesting use cases such as aggregating types and values. However, we do not recommend using them as a way to organize code. Use ES modules instead. You should only use them if the namespace's name itself is part of the API."),(0,r.yg)("p",null,"However, if you use namespaces, don't use the ",(0,r.yg)("inlineCode",{parentName:"p"},"module")," keyword. This is enforced by the ",(0,r.yg)("a",{parentName:"p",href:"#prefer-namespace-keyword"},(0,r.yg)("inlineCode",{parentName:"a"},"prefer-namespace-keyword"))," rule."),(0,r.yg)("h3",{id:"prefer-namespace-keyword"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/prefer-namespace-keyword"},(0,r.yg)("inlineCode",{parentName:"a"},"prefer-namespace-keyword"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Always use ",(0,r.yg)("inlineCode",{parentName:"p"},"namespace")," instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"module"),". ",(0,r.yg)("inlineCode",{parentName:"p"},"module")," declarations are soon to be a JavaScript feature and will cause compatibility issues."),(0,r.yg)("h2",{id:"imports"},"Imports"),(0,r.yg)("h3",{id:"consistent-type-imports"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/consistent-type-imports"},(0,r.yg)("inlineCode",{parentName:"a"},"consistent-type-imports"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Allow ",(0,r.yg)("inlineCode",{parentName:"li"},": import(...)")," style (",(0,r.yg)("inlineCode",{parentName:"li"},"disallowTypeAnnotations: false"),")"),(0,r.yg)("li",{parentName:"ul"},"Fix to inline type imports (",(0,r.yg)("inlineCode",{parentName:"li"},'fixStyle: "inline-type-imports"'),")"),(0,r.yg)("li",{parentName:"ul"},"Require ",(0,r.yg)("inlineCode",{parentName:"li"},"import type")," syntax (",(0,r.yg)("inlineCode",{parentName:"li"},'prefer: "type-imports"'),")")))),(0,r.yg)("p",null,"Use ",(0,r.yg)("inlineCode",{parentName:"p"},"import type")," to clearly signal that the import is only used for type information. This is useful for import elision. We fix to inline type imports to avoid separate statements, and we always use non-legacy TypeScript versions. If all imports are fixed to inline type imports, ",(0,r.yg)("a",{parentName:"p",href:"#no-import-type-side-effects"},(0,r.yg)("inlineCode",{parentName:"a"},"no-import-type-side-effects"))," will fix this to ",(0,r.yg)("inlineCode",{parentName:"p"},"import type")," automatically."),(0,r.yg)("p",null,"We allow ",(0,r.yg)("inlineCode",{parentName:"p"},": import(...)")," style type annotations. This is useful in an ambient context where import statements are not allowed."),(0,r.yg)("h3",{id:"no-import-type-side-effects"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-import-type-side-effects"},(0,r.yg)("inlineCode",{parentName:"a"},"no-import-type-side-effects"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Do not write ",(0,r.yg)("inlineCode",{parentName:"p"},'import { type X } from "..."'),". Instead, always use ",(0,r.yg)("inlineCode",{parentName:"p"},"import type")," if only types are imported from the module. Note that this may spontaneously arise from auto-fixing ",(0,r.yg)("a",{parentName:"p",href:"#consistent-type-imports"},(0,r.yg)("inlineCode",{parentName:"a"},"consistent-type-imports"))," due to our use of ",(0,r.yg)("inlineCode",{parentName:"p"},'fixStyle: "inline-type-imports"'),"."),(0,r.yg)("h3",{id:"no-require-imports"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-require-imports"},(0,r.yg)("inlineCode",{parentName:"a"},"no-require-imports"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Disabled in JavaScript")),(0,r.yg)("p",null,"Do not use ",(0,r.yg)("inlineCode",{parentName:"p"},"require")," in TypeScript because if you use ",(0,r.yg)("inlineCode",{parentName:"p"},"const x = require(...)")," then there will be no types. ",(0,r.yg)("inlineCode",{parentName:"p"},"import x = require(...)")," is fully obscure with ",(0,r.yg)("inlineCode",{parentName:"p"},"esModuleInterop"),". However, you may use ",(0,r.yg)("inlineCode",{parentName:"p"},"require")," in JavaScript if you are authoring CommonJS."),(0,r.yg)("h3",{id:"no-var-requires"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-var-requires"},(0,r.yg)("inlineCode",{parentName:"a"},"no-var-requires"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Disabled in JavaScript")),(0,r.yg)("p",null,"Same as above, you should not use ",(0,r.yg)("inlineCode",{parentName:"p"},"require")," in TypeScript."),(0,r.yg)("h2",{id:"exports"},"Exports"),(0,r.yg)("h3",{id:"no-useless-empty-export"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-useless-empty-export"},(0,r.yg)("inlineCode",{parentName:"a"},"no-useless-empty-export"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Do not export an empty list unless it helps to make the file a module. If the file is a ",(0,r.yg)("inlineCode",{parentName:"p"},".ts")," file (not a declaration) and it contains other imports/exports, then this ",(0,r.yg)("inlineCode",{parentName:"p"},"export {};")," statement is not necessary."),(0,r.yg)("h2",{id:"type-annotations"},"Type annotations"),(0,r.yg)("h3",{id:"explicit-function-return-type"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/explicit-function-return-type"},(0,r.yg)("inlineCode",{parentName:"a"},"explicit-function-return-type"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"We don't require explicit return types for functions. Let TypeScript infer as much as possible to reduce verboseness. We do require explicit module boundary types, though."),(0,r.yg)("h3",{id:"explicit-module-boundary-types"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/explicit-module-boundary-types"},(0,r.yg)("inlineCode",{parentName:"a"},"explicit-module-boundary-types"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: warning"),(0,r.yg)("li",{parentName:"ul"},"Disabled in JavaScript")),(0,r.yg)("p",null,'We require explicit module boundary types. This makes sure that any module boundary is type safe. Although 90% of the time this "boundary" is actually internal, it still helps us to prevent any accidental public API changes.'),(0,r.yg)("h3",{id:"typedef"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/typedef"},(0,r.yg)("inlineCode",{parentName:"a"},"typedef"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"This rule is too strict and does not allow type inference. Let TypeScript infer types where it can, and only add types for consistency, clarity, or narrower types. Always compile with ",(0,r.yg)("inlineCode",{parentName:"p"},"noImplicitAny"),"."),(0,r.yg)("h2",{id:"type-assertions"},"Type assertions"),(0,r.yg)("h3",{id:"consistent-type-assertions"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/consistent-type-assertions"},(0,r.yg)("inlineCode",{parentName:"a"},"consistent-type-assertions"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Require ",(0,r.yg)("inlineCode",{parentName:"li"},"as T")," syntax (",(0,r.yg)("inlineCode",{parentName:"li"},'assertionStyle: "as"'),")"),(0,r.yg)("li",{parentName:"ul"},"Allow object literal values to have asserted type anywhere (",(0,r.yg)("inlineCode",{parentName:"li"},'objectLiteralTypeAssertions: "allow"'),")")))),(0,r.yg)("p",null,"Use ",(0,r.yg)("inlineCode",{parentName:"p"},"as T")," instead of ",(0,r.yg)("inlineCode",{parentName:"p"},""),". The latter is soft-deprecated because it does not work in JSX. The former is also easier to read and easier to search for."),(0,r.yg)("p",null,"We allow object literals to be asserted everywhere. We don't think there's any difference between ",(0,r.yg)("inlineCode",{parentName:"p"},"const x = {} as T")," and ",(0,r.yg)("inlineCode",{parentName:"p"},"const x = y as T"),", so if the latter is allowed, so should the former."),(0,r.yg)("p",null,"However, remember ",(0,r.yg)("strong",{parentName:"p"},"use ",(0,r.yg)("inlineCode",{parentName:"strong"},"as T")," only when you are sure that the type is correct"),". It is not type safe and can lead to runtime errors."),(0,r.yg)("h3",{id:"no-confusing-non-null-assertion"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-confusing-non-null-assertion"},(0,r.yg)("inlineCode",{parentName:"a"},"no-confusing-non-null-assertion"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"You should never use ",(0,r.yg)("inlineCode",{parentName:"p"},"!")," in a comparison, because it does not change the comparison outcome or type checking."),(0,r.yg)("h3",{id:"no-extra-non-null-assertion"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-extra-non-null-assertion"},(0,r.yg)("inlineCode",{parentName:"a"},"no-extra-non-null-assertion"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Never use ",(0,r.yg)("inlineCode",{parentName:"p"},"!!")," because it is redundant. We don't forbid ",(0,r.yg)("inlineCode",{parentName:"p"},"!"),' so there\'s no point in screaming "this is really non-null!!"'),(0,r.yg)("h3",{id:"no-non-null-asserted-nullish-coalescing"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-non-null-asserted-nullish-coalescing"},(0,r.yg)("inlineCode",{parentName:"a"},"no-non-null-asserted-nullish-coalescing"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Do not use non-null assertions on a nullish coalescing LHS. This defeats the purpose."),(0,r.yg)("h3",{id:"no-non-null-asserted-optional-chain"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-non-null-asserted-optional-chain"},(0,r.yg)("inlineCode",{parentName:"a"},"no-non-null-asserted-optional-chain"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Do not use non-null assertions at the end of an optional chain. Sometimes this is necessary, for example, when passing a value to a function that actually handles ",(0,r.yg)("inlineCode",{parentName:"p"},"undefined")," but does not declare it in the type, but in most cases, it is not necessary and doing so masks potential bugs."),(0,r.yg)("h3",{id:"no-non-null-assertion"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-non-null-assertion"},(0,r.yg)("inlineCode",{parentName:"a"},"no-non-null-assertion"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"There are a significant number of places where non-null assertions are inevitable:"),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},"Weak built-in types")),(0,r.yg)("p",null,"Some TypeScript lib types are not accurate. One common example is regular expressions. The discussion is in ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/microsoft/TypeScript/issues/32098"},"microsoft/TypeScript#32098"),"."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const author: string | undefined"},"author")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const commit: string"},"commit"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) String.match(matcher: {\n [Symbol.match](string: string): RegExpMatchArray | null;\n}): RegExpMatchArray | null (+1 overload)"},"match")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"/(?<"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"name"),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},">"),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"+"),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"),(?<"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"time"),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},">"),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"\\d"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"+"),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},")/"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},")?.",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) RegExpMatchArray.groups?: {\n [key: string]: string;\n} | undefined"},"groups"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"string | undefined"},"name"),";")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"Object is possibly 'undefined'."),(0,r.yg)("span",{parentName:"span",className:"code"},"2532")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"Object is possibly 'undefined'."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// But I know that `name` always exists in `groups`!"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const author: string | undefined"},"author")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const commit: string"},"commit"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) String.match(matcher: {\n [Symbol.match](string: string): RegExpMatchArray | null;\n}): RegExpMatchArray | null (+1 overload)"},"match")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/(?<"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"name"),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},">"),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"+"),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"),(?<"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"time"),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},">"),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"\\d"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"+"),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},")/"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},")?.",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) RegExpMatchArray.groups?: {\n [key: string]: string;\n} | undefined"},"groups"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"string | undefined"},"name"),";")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"Object is possibly 'undefined'."),(0,r.yg)("span",{parentName:"span",className:"code"},"2532")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"Object is possibly 'undefined'."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// But I know that `name` always exists in `groups`!")))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},"Control-flow analysis failure")),(0,r.yg)("p",null,"Control-flow analysis is not preserved across callback boundaries, because TypeScript cannot predict when a callback will be called. See ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/microsoft/TypeScript/issues/9998"},"microsoft/TypeScript#9998")),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"import"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," { ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(alias) function useRef(initialValue: T): MutableRefObject (+2 overloads)\nimport useRef"},"useRef")," } "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"from"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"react"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function useDemo(): void"},"useDemo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const ref: React.RefObject<(a: number) => void>"},"ref")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(alias) useRef<(a: number) => void>(initialValue: ((a: number) => void) | null): React.RefObject<(a: number) => void> (+2 overloads)\nimport useRef"},"useRef")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"<("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: number"},"a")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"void"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},">("),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const ref: React.RefObject<(a: number) => void>"},"ref"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) React.RefObject<(a: number) => void>.current: ((a: number) => void) | null"},"current"),") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Do other stuff...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ["),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"]."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Array.forEach(callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any): void"},"forEach")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: number"},"a")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const ref: React.RefObject<(a: number) => void>"},"ref"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) React.RefObject<(a: number) => void>.current: ((a: number) => void) | null"},"current")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: number"},"a"),"));")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"Cannot invoke an object which is possibly 'null'."),(0,r.yg)("span",{parentName:"span",className:"code"},"2721")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"Cannot invoke an object which is possibly 'null'."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// But I just checked `ref.current`!")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"import"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(alias) function useRef(initialValue: T): MutableRefObject (+2 overloads)\nimport useRef"},"useRef")," } "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"from"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"react"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"function useDemo(): void"},"useDemo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const ref: React.RefObject<(a: number) => void>"},"ref")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(alias) useRef<(a: number) => void>(initialValue: ((a: number) => void) | null): React.RefObject<(a: number) => void> (+2 overloads)\nimport useRef"},"useRef")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: number"},"a")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"void"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},">("),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const ref: React.RefObject<(a: number) => void>"},"ref"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) React.RefObject<(a: number) => void>.current: ((a: number) => void) | null"},"current"),") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Do other stuff...")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ["),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"]."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Array.forEach(callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any): void"},"forEach")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: number"},"a")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const ref: React.RefObject<(a: number) => void>"},"ref"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) React.RefObject<(a: number) => void>.current: ((a: number) => void) | null"},"current")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: number"},"a"),"));")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"Cannot invoke an object which is possibly 'null'."),(0,r.yg)("span",{parentName:"span",className:"code"},"2721")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"Cannot invoke an object which is possibly 'null'."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// But I just checked `ref.current`!")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},"Clearer developer intention")),(0,r.yg)("p",null,"Sometimes, you are really sure that a value exists, but TypeScript doesn't believe you."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'const managers: readonly [{\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n}, {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n}, {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}]'},"managers")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," [")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," { ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) name: "npm"'},"name"),": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"npm"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},", ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "package-lock.json"'},"lockFile"),": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"package-lock.json"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," { ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) name: "yarn"'},"name"),": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"yarn"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},", ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "yarn.lock"'},"lockFile"),": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"yarn.lock"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," { ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) name: "pnpm"'},"name"),": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"pnpm"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},", ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "pnpm-lock.yaml"'},"lockFile"),": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"pnpm-lock.yaml"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"] "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"as"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'type const = readonly [{\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n}, {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n}, {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}]'},"const")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'const lockFile: "package-lock.json" | "yarn.lock" | "pnpm-lock.yaml"'},"lockFile")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'const managers: readonly [{\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n}, {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n}, {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}]'},"managers"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'(method) ReadonlyArray<{ readonly name: "npm"; readonly lockFile: "package-lock.json"; } | { readonly name: "yarn"; readonly lockFile: "yarn.lock"; } | { readonly name: "pnpm"; readonly lockFile: "pnpm-lock.yaml"; }>.find(predicate: (value: {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n} | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}, index: number, obj: readonly ({\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | ... 1 more ... | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n})[]) => unknown, thisArg?: any): {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | ... 2 more ... | undefined (+1 overload)'},"find")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'(parameter) obj: {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n} | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}'},"obj")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(parameter) obj: {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n} | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}'},"obj"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) name: "npm" | "yarn" | "pnpm"'},"name")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"npm"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},").",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "package-lock.json" | "yarn.lock" | "pnpm-lock.yaml"'},"lockFile"),";")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"Object is possibly 'undefined'."),(0,r.yg)("span",{parentName:"span",className:"code"},"2532")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"Object is possibly 'undefined'."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// It absolutely exists, but making it strongly typed is unnecessary trouble"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'const managers: readonly [{\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n}, {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n}, {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}]'},"managers")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," [")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) name: "npm"'},"name"),": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"npm"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "package-lock.json"'},"lockFile"),": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"package-lock.json"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) name: "yarn"'},"name"),": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"yarn"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "yarn.lock"'},"lockFile"),": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"yarn.lock"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) name: "pnpm"'},"name"),": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"pnpm"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "pnpm-lock.yaml"'},"lockFile"),": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"pnpm-lock.yaml"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"] "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"as"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'type const = readonly [{\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n}, {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n}, {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}]'},"const")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'const lockFile: "package-lock.json" | "yarn.lock" | "pnpm-lock.yaml"'},"lockFile")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'const managers: readonly [{\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n}, {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n}, {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}]'},"managers"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'(method) ReadonlyArray<{ readonly name: "npm"; readonly lockFile: "package-lock.json"; } | { readonly name: "yarn"; readonly lockFile: "yarn.lock"; } | { readonly name: "pnpm"; readonly lockFile: "pnpm-lock.yaml"; }>.find(predicate: (value: {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n} | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}, index: number, obj: readonly ({\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | ... 1 more ... | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n})[]) => unknown, thisArg?: any): {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | ... 2 more ... | undefined (+1 overload)'},"find")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:'(parameter) obj: {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n} | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}'},"obj")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(parameter) obj: {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n} | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}'},"obj"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) name: "npm" | "yarn" | "pnpm"'},"name")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"npm"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},").",(0,r.yg)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "package-lock.json" | "yarn.lock" | "pnpm-lock.yaml"'},"lockFile"),";")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"Object is possibly 'undefined'."),(0,r.yg)("span",{parentName:"span",className:"code"},"2532")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"Object is possibly 'undefined'."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// It absolutely exists, but making it strongly typed is unnecessary trouble")))))),(0,r.yg)("p",null,"This is also related to the previous two points in many cases, but in other cases where TypeScript cannot ensure existence with control-flow analysis, we need to convey developer intent through allowing ",(0,r.yg)("inlineCode",{parentName:"p"},"undefined")," or not."),(0,r.yg)("h3",{id:"prefer-as-const"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/prefer-as-const"},(0,r.yg)("inlineCode",{parentName:"a"},"prefer-as-const"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Use ",(0,r.yg)("inlineCode",{parentName:"p"},"x as const")," instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"x as x")," when ",(0,r.yg)("inlineCode",{parentName:"p"},"x")," is a literal. This is because ",(0,r.yg)("inlineCode",{parentName:"p"},"as const")," is more type safe and more readable."),(0,r.yg)("h2",{id:"ts-comments"},"TS comments"),(0,r.yg)("h3",{id:"ban-ts-comment"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/array-type"},(0,r.yg)("inlineCode",{parentName:"a"},"ban-ts-comment"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Allow ",(0,r.yg)("inlineCode",{parentName:"li"},"@ts-check"),"; require ",(0,r.yg)("inlineCode",{parentName:"li"},"@ts-expect-error")," to have a description; disallow ",(0,r.yg)("inlineCode",{parentName:"li"},"@ts-ignore")," and ",(0,r.yg)("inlineCode",{parentName:"li"},"@ts-nocheck")),(0,r.yg)("li",{parentName:"ul"},"Require descriptions to be at least 3 characters long (",(0,r.yg)("inlineCode",{parentName:"li"},"minimumDescriptionLength: 3"),")")))),(0,r.yg)("p",null,"You should never use ",(0,r.yg)("inlineCode",{parentName:"p"},"@ts-ignore")," or ",(0,r.yg)("inlineCode",{parentName:"p"},"@ts-nocheck"),". They completely turn off the checker and have no sense of granularity. ",(0,r.yg)("inlineCode",{parentName:"p"},"@ts-expect-error")," is better because it requires an error to be present, but it is still dangerous an should only be applied when there cannot be any other type errors."),(0,r.yg)("h3",{id:"prefer-ts-expect-error"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/prefer-ts-expect-error"},(0,r.yg)("inlineCode",{parentName:"a"},"prefer-ts-expect-error"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Use ",(0,r.yg)("inlineCode",{parentName:"p"},"@ts-expect-error")," instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"@ts-ignore")," or ",(0,r.yg)("inlineCode",{parentName:"p"},"@ts-nocheck"),". This rule can auto-fix ",(0,r.yg)("inlineCode",{parentName:"p"},"@ts-ignore")," to ",(0,r.yg)("inlineCode",{parentName:"p"},"@ts-expect-error"),"."),(0,r.yg)("h3",{id:"triple-slash-reference"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/triple-slash-reference"},(0,r.yg)("inlineCode",{parentName:"a"},"triple-slash-reference"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Never allow ",(0,r.yg)("inlineCode",{parentName:"li"},'/// ')," (",(0,r.yg)("inlineCode",{parentName:"li"},'lib: "never"'),")"),(0,r.yg)("li",{parentName:"ul"},"Never allow ",(0,r.yg)("inlineCode",{parentName:"li"},'/// ')," (",(0,r.yg)("inlineCode",{parentName:"li"},'path: "never"'),")"),(0,r.yg)("li",{parentName:"ul"},"Allow ",(0,r.yg)("inlineCode",{parentName:"li"},'/// ')," when the file has no import (",(0,r.yg)("inlineCode",{parentName:"li"},'types: "prefer-import"'),")")))),(0,r.yg)("p",null,"You should generally use modules instead of triple-slash references. ",(0,r.yg)("inlineCode",{parentName:"p"},'/// ')," can be substituted with a side-effect import. ",(0,r.yg)("inlineCode",{parentName:"p"},'/// ')," can be substituted with the ",(0,r.yg)("inlineCode",{parentName:"p"},"lib")," compiler option. ",(0,r.yg)("inlineCode",{parentName:"p"},'/// ')," can be substituted with an import, except when you want to load ambient declarations, such as ",(0,r.yg)("inlineCode",{parentName:"p"},"declare module")," and ",(0,r.yg)("inlineCode",{parentName:"p"},"declare global"),". In this case, the triple slash reference should always live in an ambient declaration itself."),(0,r.yg)("h2",{id:"plain-javascript"},"Plain JavaScript"),(0,r.yg)("p",null,"These rules probably shouldn't be in typescript-eslint in the first place."),(0,r.yg)("h3",{id:"no-dynamic-delete"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-dynamic-delete"},(0,r.yg)("inlineCode",{parentName:"a"},"no-dynamic-delete"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,(0,r.yg)("inlineCode",{parentName:"p"},"delete")," is necessary for transforming objects:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"for"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"key"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"of"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Object"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"keys"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(obj)) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"delete"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," obj[key];")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"for"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"key"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"of"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Object"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"keys"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(obj)) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"delete"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," obj[key];")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h3",{id:"no-this-alias"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-this-alias"},(0,r.yg)("inlineCode",{parentName:"a"},"no-this-alias"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: warn"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Allow destructuring values from ",(0,r.yg)("inlineCode",{parentName:"li"},"this")," (",(0,r.yg)("inlineCode",{parentName:"li"},"allowDestructuring: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Do not allow any particular alias (",(0,r.yg)("inlineCode",{parentName:"li"},"allowedNames: []"),")"))),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/js-style-guide/eslint-base/functions#consistent-this"},(0,r.yg)("inlineCode",{parentName:"a"},"consistent-this")))))),(0,r.yg)("p",null,"You should generally avoid ",(0,r.yg)("inlineCode",{parentName:"p"},"this")," aliasing because it is rare to rely on nested ",(0,r.yg)("inlineCode",{parentName:"p"},"this")," values. In case when this is actually necessary, you should use a semantic name instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"self")," or ",(0,r.yg)("inlineCode",{parentName:"p"},"that"),"."),(0,r.yg)("h3",{id:"prefer-for-of"},(0,r.yg)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/prefer-for-of"},(0,r.yg)("inlineCode",{parentName:"a"},"prefer-for-of"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Use a ",(0,r.yg)("inlineCode",{parentName:"p"},"for-of")," loop instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"for")," when the pattern is clearly convertible. Note that this rule is not 100% safe as not every indexed collection is iterable."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d3bef8cd.d4cc144c.js b/assets/js/d3bef8cd.d4cc144c.js deleted file mode 100644 index 70b2926..0000000 --- a/assets/js/d3bef8cd.d4cc144c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96],{1753:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>s,default:()=>c,frontMatter:()=>l,metadata:()=>o,toc:()=>i});var n=t(2685),r=(t(7378),t(5318));const l={sidebar_position:3},s="TypeScript",o={unversionedId:"typescript/base",id:"typescript/base",title:"TypeScript",description:"Types",source:"@site/../docs/typescript/base.md",sourceDirName:"typescript",slug:"/typescript/base",permalink:"/js-style-guide/typescript/base",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"defaultSidebar",previous:{title:"typescript-eslint rules",permalink:"/js-style-guide/typescript/"},next:{title:"Type-checked ESLint rules",permalink:"/js-style-guide/typescript/type-checked"}},p={},i=[{value:"Types",id:"types",level:2},{value:"array-type",id:"array-type",level:3},{value:"ban-types",id:"ban-types",level:3},{value:"consistent-indexed-object-style",id:"consistent-indexed-object-style",level:3},{value:"method-signature-style",id:"method-signature-style",level:3},{value:"no-explicit-any",id:"no-explicit-any",level:3},{value:"no-invalid-void-type",id:"no-invalid-void-type",level:3},{value:"no-misused-new",id:"no-misused-new",level:3},{value:"prefer-function-type",id:"prefer-function-type",level:3},{value:"Type/value declarations",id:"typevalue-declarations",level:2},{value:"consistent-type-definitions",id:"consistent-type-definitions",level:3},{value:"init-declarations",id:"init-declarations",level:3},{value:"no-empty-interface",id:"no-empty-interface",level:3},{value:"no-redeclare",id:"no-redeclare",level:3},{value:"no-shadow",id:"no-shadow",level:3},{value:"no-unused-vars",id:"no-unused-vars",level:3},{value:"no-use-before-define",id:"no-use-before-define",level:3},{value:"Functions",id:"functions",level:2},{value:"adjacent-overload-signatures",id:"adjacent-overload-signatures",level:3},{value:"default-param-last",id:"default-param-last",level:3},{value:"no-invalid-this",id:"no-invalid-this",level:3},{value:"unified-signatures",id:"unified-signatures",level:3},{value:"Generics",id:"generics",level:2},{value:"consistent-generic-constructors",id:"consistent-generic-constructors",level:3},{value:"no-array-constructor",id:"no-array-constructor",level:3},{value:"no-unnecessary-type-constraint",id:"no-unnecessary-type-constraint",level:3},{value:"no-unused-expressions",id:"no-unused-expressions",level:3},{value:"Classes",id:"classes",level:2},{value:"class-literal-property-style",id:"class-literal-property-style",level:3},{value:"explicit-member-accessibility",id:"explicit-member-accessibility",level:3},{value:"no-dupe-class-members",id:"no-dupe-class-members",level:3},{value:"no-extraneous-class",id:"no-extraneous-class",level:3},{value:"parameter-properties",id:"parameter-properties",level:3},{value:"Enums",id:"enums",level:2},{value:"prefer-enum-initializers",id:"prefer-enum-initializers",level:3},{value:"prefer-literal-enum-member",id:"prefer-literal-enum-member",level:3},{value:"Namespaces",id:"namespaces",level:2},{value:"no-namespace",id:"no-namespace",level:3},{value:"prefer-namespace-keyword",id:"prefer-namespace-keyword",level:3},{value:"Imports",id:"imports",level:2},{value:"consistent-type-imports",id:"consistent-type-imports",level:3},{value:"no-import-type-side-effects",id:"no-import-type-side-effects",level:3},{value:"no-require-imports",id:"no-require-imports",level:3},{value:"no-var-requires",id:"no-var-requires",level:3},{value:"Exports",id:"exports",level:2},{value:"no-useless-empty-export",id:"no-useless-empty-export",level:3},{value:"Type annotations",id:"type-annotations",level:2},{value:"explicit-function-return-type",id:"explicit-function-return-type",level:3},{value:"explicit-module-boundary-types",id:"explicit-module-boundary-types",level:3},{value:"typedef",id:"typedef",level:3},{value:"Type assertions",id:"type-assertions",level:2},{value:"consistent-type-assertions",id:"consistent-type-assertions",level:3},{value:"no-confusing-non-null-assertion",id:"no-confusing-non-null-assertion",level:3},{value:"no-extra-non-null-assertion",id:"no-extra-non-null-assertion",level:3},{value:"no-non-null-asserted-nullish-coalescing",id:"no-non-null-asserted-nullish-coalescing",level:3},{value:"no-non-null-asserted-optional-chain",id:"no-non-null-asserted-optional-chain",level:3},{value:"no-non-null-assertion",id:"no-non-null-assertion",level:3},{value:"prefer-as-const",id:"prefer-as-const",level:3},{value:"TS comments",id:"ts-comments",level:2},{value:"ban-ts-comment",id:"ban-ts-comment",level:3},{value:"prefer-ts-expect-error",id:"prefer-ts-expect-error",level:3},{value:"triple-slash-reference",id:"triple-slash-reference",level:3},{value:"Plain JavaScript",id:"plain-javascript",level:2},{value:"no-dynamic-delete",id:"no-dynamic-delete",level:3},{value:"no-this-alias",id:"no-this-alias",level:3},{value:"prefer-for-of",id:"prefer-for-of",level:3}],d={toc:i},m="wrapper";function c(e){let{components:a,...t}=e;return(0,r.kt)(m,(0,n.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"typescript"},"TypeScript"),(0,r.kt)("h2",{id:"types"},"Types"),(0,r.kt)("h3",{id:"array-type"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/array-type"},(0,r.kt)("inlineCode",{parentName:"a"},"array-type"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Require ",(0,r.kt)("inlineCode",{parentName:"li"},"T[]")," syntax (",(0,r.kt)("inlineCode",{parentName:"li"},'default: "array"'),")")))),(0,r.kt)("p",null,"We require ",(0,r.kt)("inlineCode",{parentName:"p"},"T[]")," syntax for arrays. This is a matter of consistency. Even for very, very complex types, we still require putting ",(0,r.kt)("inlineCode",{parentName:"p"},"[]")," at the end, instead of using ",(0,r.kt)("inlineCode",{parentName:"p"},"Array<>"),". If the rule provides more customization, such as allowing ",(0,r.kt)("inlineCode",{parentName:"p"},"(T | U)[]"),", we may reconsider."),(0,r.kt)("h3",{id:"ban-types"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/ban-types"},(0,r.kt)("inlineCode",{parentName:"a"},"ban-types"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Extend defaults (",(0,r.kt)("inlineCode",{parentName:"li"},"extendDefaults: true"),")"),(0,r.kt)("li",{parentName:"ul"},"Unban ",(0,r.kt)("inlineCode",{parentName:"li"},"{}")," (",(0,r.kt)("inlineCode",{parentName:"li"},'types: { "{}": false }'),")")))),(0,r.kt)("p",null,"The types listed in the default options are either dangerous or misleading. The only exception is ",(0,r.kt)("inlineCode",{parentName:"p"},"{}"),", which in our eyes is safe to use. It may not behave as one expects, but it doesn't hinder type safety. It is also used by TypeScript in utility types."),(0,r.kt)("h3",{id:"consistent-indexed-object-style"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/consistent-indexed-object-style"},(0,r.kt)("inlineCode",{parentName:"a"},"consistent-indexed-object-style"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Require ",(0,r.kt)("inlineCode",{parentName:"li"},"{ [key: string]: T }")," syntax (",(0,r.kt)("inlineCode",{parentName:"li"},'"index-signature"'),")")))),(0,r.kt)("p",null,"Always use the index signature syntax. It's not much longer:"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"type"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," { ["),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"x"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"]"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"T"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," };")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"type"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"B"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"Record"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"T"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},">;"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"type"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { ["),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"x"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"]"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"T"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," };")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"type"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"B"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"Record"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"T"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},">;")))))),(0,r.kt)("p",null,"But it allows annotating the semantics of the key. Always use a descriptive name, such as ",(0,r.kt)("inlineCode",{parentName:"p"},"{ [url: string]: JSX.Element }"),"."),(0,r.kt)("h3",{id:"method-signature-style"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/method-signature-style"},(0,r.kt)("inlineCode",{parentName:"a"},"method-signature-style"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Require ",(0,r.kt)("inlineCode",{parentName:"li"},"foo: () => T")," syntax (",(0,r.kt)("inlineCode",{parentName:"li"},'"property"'),")")))),(0,r.kt)("p",null,"The property syntax is strictly more type-safe. See the rule docs for more information. One exception allowed is when adding types for library methods, such as when polyfilling. This is because the lib declarations use methods anyway."),(0,r.kt)("h3",{id:"no-explicit-any"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-explicit-any"},(0,r.kt)("inlineCode",{parentName:"a"},"no-explicit-any"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning")),(0,r.kt)("p",null,"Never use ",(0,r.kt)("inlineCode",{parentName:"p"},"any"),". If you trace the assignability of your types carefully, you should always be able to find a suitable type. Only able to use ",(0,r.kt)("inlineCode",{parentName:"p"},"any")," is a sign of overcomplicated API design. It is only set to warning because we acknowledge the necessity of ",(0,r.kt)("inlineCode",{parentName:"p"},"any"),", such as when indexing an unknown object."),(0,r.kt)("h3",{id:"no-invalid-void-type"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-invalid-void-type"},(0,r.kt)("inlineCode",{parentName:"a"},"no-invalid-void-type"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Do not allow ",(0,r.kt)("inlineCode",{parentName:"li"},"void")," as ",(0,r.kt)("inlineCode",{parentName:"li"},"this")," (",(0,r.kt)("inlineCode",{parentName:"li"},"allowAsThisParameter: false"),")"),(0,r.kt)("li",{parentName:"ul"},"Allow ",(0,r.kt)("inlineCode",{parentName:"li"},"void")," in generic type arguments (",(0,r.kt)("inlineCode",{parentName:"li"},"allowInGenericTypeArguments: true"),")")))),(0,r.kt)("p",null,"Only use ",(0,r.kt)("inlineCode",{parentName:"p"},"void")," as the return type of functions. In other places, ",(0,r.kt)("inlineCode",{parentName:"p"},"void")," behaves like ",(0,r.kt)("inlineCode",{parentName:"p"},"unknown")," and is not type safe. We allow ",(0,r.kt)("inlineCode",{parentName:"p"},"void")," in generic type arguments because it is useful for ",(0,r.kt)("inlineCode",{parentName:"p"},"Promise"),". However, do not write ",(0,r.kt)("inlineCode",{parentName:"p"},"this: void"),"\u2014if you don't care about the ",(0,r.kt)("inlineCode",{parentName:"p"},"this")," value, just omit the ",(0,r.kt)("inlineCode",{parentName:"p"},"this")," parameter."),(0,r.kt)("h3",{id:"no-misused-new"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-misused-new"},(0,r.kt)("inlineCode",{parentName:"a"},"no-misused-new"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Do not declare a method called ",(0,r.kt)("inlineCode",{parentName:"p"},"new")," in a class. Do not declare a method called ",(0,r.kt)("inlineCode",{parentName:"p"},"constructor")," in an interface. This is probably a mistake and you meant to declare a constructor in both cases."),(0,r.kt)("h3",{id:"prefer-function-type"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/prefer-function-type"},(0,r.kt)("inlineCode",{parentName:"a"},"prefer-function-type"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Use ",(0,r.kt)("inlineCode",{parentName:"p"},"type Foo = () => T")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"interface Foo { (): T }"),". The former is more readable while the latter may be simply due to missing a property name. If you want to make an augmentable callable type, use a disable comment."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"interface"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"Plugin"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"ast"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"AST"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},")"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"AST"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"}),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// User code")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"interface"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"Plugin"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"extension1"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"MyExtension"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"interface"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"Plugin"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"ast"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"AST"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},")"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"AST"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"}),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// User code")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"interface"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"Plugin"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"extension1"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"MyExtension"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("h2",{id:"typevalue-declarations"},"Type/value declarations"),(0,r.kt)("h3",{id:"consistent-type-definitions"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/consistent-type-definitions"},(0,r.kt)("inlineCode",{parentName:"a"},"consistent-type-definitions"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,"We don't mind whether ",(0,r.kt)("inlineCode",{parentName:"p"},"interface")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"type")," is used. Generally:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Use ",(0,r.kt)("inlineCode",{parentName:"li"},"interface")," for public APIs that are extendable so that users may be able to declaration-merge."),(0,r.kt)("li",{parentName:"ul"},"Use ",(0,r.kt)("inlineCode",{parentName:"li"},"interface")," for large object types."),(0,r.kt)("li",{parentName:"ul"},"Use ",(0,r.kt)("inlineCode",{parentName:"li"},"type")," for convenience types that are small.")),(0,r.kt)("h3",{id:"init-declarations"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/init-declarations"},(0,r.kt)("inlineCode",{parentName:"a"},"init-declarations"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Require variables to be initialized (",(0,r.kt)("inlineCode",{parentName:"li"},'"always"'),")"))),(0,r.kt)("li",{parentName:"ul"},"Related:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/js-style-guide/eslint-base/variables-names#init-declarations"},(0,r.kt)("inlineCode",{parentName:"a"},"init-declarations")))))),(0,r.kt)("p",null,"See the base rule for more information. This extension rule prevents false positives for TypeScript-specific syntax so it is safe to use in JavaScript files too."),(0,r.kt)("h3",{id:"no-empty-interface"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-empty-interface"},(0,r.kt)("inlineCode",{parentName:"a"},"no-empty-interface"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Allow extended interfaces to be empty (",(0,r.kt)("inlineCode",{parentName:"li"},"allowSingleExtends: true"),")")))),(0,r.kt)("p",null,"Empty interfaces are a form of ",(0,r.kt)("inlineCode",{parentName:"p"},"{}"),", which match any non-nullish type. However, we allow ",(0,r.kt)("inlineCode",{parentName:"p"},"interface X extends Y {}")," as a way to alias interfaces, because then we can declaration-merge ",(0,r.kt)("inlineCode",{parentName:"p"},"X"),"."),(0,r.kt)("h3",{id:"no-redeclare"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-redeclare"},(0,r.kt)("inlineCode",{parentName:"a"},"no-redeclare"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Allow declaration merging (",(0,r.kt)("inlineCode",{parentName:"li"},"ignoreDeclarationMerge: true"),")"))),(0,r.kt)("li",{parentName:"ul"},"Related:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/js-style-guide/eslint-base/variables-names#no-redeclare"},(0,r.kt)("inlineCode",{parentName:"a"},"no-redeclare")))))),(0,r.kt)("p",null,"This reduces the errors reported by the base rule. It is safe to use in JavaScript files because it does not change behaviors outside of TypeScript."),(0,r.kt)("p",null,'We allow "declaration merging" between variables and types:'),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"User"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," z."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"object"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"({});")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"type"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"User"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"z"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"infer"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," User>;"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"User"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," z."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"object"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"({});")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"type"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"User"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"z"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"infer"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," User>;")))))),(0,r.kt)("p",null,"If the rule reports for this case and it really makes sense, you can disable the rule for that line. (",(0,r.kt)("a",{parentName:"p",href:"https://github.com/typescript-eslint/typescript-eslint/issues/6441"},"typescript-eslint/typescript-eslint#6441"),")"),(0,r.kt)("h3",{id:"no-shadow"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-shadow"},(0,r.kt)("inlineCode",{parentName:"a"},"no-shadow"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Ignore type declarations and value declarations shadowing each other (",(0,r.kt)("inlineCode",{parentName:"li"},"ignoreTypeValueShadowing: true"),")"),(0,r.kt)("li",{parentName:"ul"},"Do not allow function type parameter name to shadow another variable (",(0,r.kt)("inlineCode",{parentName:"li"},"ignoreFunctionTypeParameterNameValueShadow: false"),")")))),(0,r.kt)("p",null,"We allow type declarations and value declarations to shadow each other. This is because they are in different namespaces and you always access each one with a different syntax. However, a function parameter name always lives in value space even when it belongs in a type, so we don't allow it to shadow another variable."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"test"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"type"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"Func"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"test"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," test; "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// What is `test` here?"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"test"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"type"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"Func"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"test"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," test; "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// What is `test` here?")))))),(0,r.kt)("p",null,"This rule is safe to use in JavaScript files because it does not change behaviors outside of TypeScript."),(0,r.kt)("h3",{id:"no-unused-vars"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-unused-vars"},(0,r.kt)("inlineCode",{parentName:"a"},"no-unused-vars"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Related:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/js-style-guide/eslint-base/variables-names#no-unused-vars"},(0,r.kt)("inlineCode",{parentName:"a"},"no-unused-vars")))))),(0,r.kt)("p",null,"See the base rule for more information. This extension rule adds support for TypeScript-specific syntax so it is safe to use in JavaScript files too."),(0,r.kt)("h3",{id:"no-use-before-define"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-use-before-define"},(0,r.kt)("inlineCode",{parentName:"a"},"no-use-before-define"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Check use-before-define enums (",(0,r.kt)("inlineCode",{parentName:"li"},"enums: true"),")"),(0,r.kt)("li",{parentName:"ul"},"Allow referencing anything in type space (",(0,r.kt)("inlineCode",{parentName:"li"},"ignoreTypeReferences: true"),")"),(0,r.kt)("li",{parentName:"ul"},"Allow all type declarations to be hoisted (",(0,r.kt)("inlineCode",{parentName:"li"},"typedefs: false"),")")))),(0,r.kt)("p",null,"See the base rule for more information. Because types behave like functions, they are safe to be referenced everywhere. However, when enums are used as values, they are not hoisted. This is also checked by TypeScript."),(0,r.kt)("h2",{id:"functions"},"Functions"),(0,r.kt)("h3",{id:"adjacent-overload-signatures"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/adjacent-overload-signatures"},(0,r.kt)("inlineCode",{parentName:"a"},"adjacent-overload-signatures"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"We require overload signatures to be adjacent to each other. This makes the signatures of functions easier to read. Note that the rule has a known bug: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/typescript-eslint/typescript-eslint/issues/4576"},"typescript-eslint/typescript-eslint#4576"),"."),(0,r.kt)("h3",{id:"default-param-last"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/default-param-last"},(0,r.kt)("inlineCode",{parentName:"a"},"default-param-last"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Disabled in JavaScript"),(0,r.kt)("li",{parentName:"ul"},"Related:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/js-style-guide/eslint-base/functions#default-param-last"},(0,r.kt)("inlineCode",{parentName:"a"},"default-param-last")))))),(0,r.kt)("p",null,"We disable the base rule but enable the TypeScript version. In TypeScript files, we require default parameters to be at the end of the parameter list. This is because required parameters must be passed values, so optional parameters before them have no effect and should just have ",(0,r.kt)("inlineCode",{parentName:"p"},"| undefined")," in their types. In JavaScript, we don't require this because it is not possible to indicate optionality except through default values."),(0,r.kt)("h3",{id:"no-invalid-this"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-invalid-this"},(0,r.kt)("inlineCode",{parentName:"a"},"no-invalid-this"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off"),(0,r.kt)("li",{parentName:"ul"},"Related:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/js-style-guide/eslint-base/functions#no-invalid-this"},(0,r.kt)("inlineCode",{parentName:"a"},"no-invalid-this")))))),(0,r.kt)("p",null,"Even in TypeScript files, we don't need this rule, because this rule falls into a dilemma:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"In TypeScript files, its utility clashes exactly with the TypeScript compiler if one adds the ",(0,r.kt)("inlineCode",{parentName:"li"},"this")," parameter anyway;"),(0,r.kt)("li",{parentName:"ul"},"In JavaScript files, it does not prevent any additional false positives.")),(0,r.kt)("h3",{id:"unified-signatures"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/unified-signatures"},(0,r.kt)("inlineCode",{parentName:"a"},"unified-signatures"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Do not allow differently named parameters as distinct overloads (",(0,r.kt)("inlineCode",{parentName:"li"},"ignoreDifferentlyNamedParameters: false"),")")))),(0,r.kt)("p",null,"You should only use overloads to associate input with output, or associate multiple inputs. Combine signatures as much as possible, because doing so allows passing a union."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function doSomething(id: number): void (+1 overload)"},"doSomething")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) id: number"},"id")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},")"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"void"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function doSomething(ids: number[]): void (+1 overload)"},"doSomething")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) ids: number[]"},"ids")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"[])"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"void"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function doSomething(id: number): void (+1 overload)"},"doSomething")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) ids: number | number[]"},"ids")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"[])"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"void"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"declare"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const maybeIds: number | number[]"},"maybeIds")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"[];")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function doSomething(id: number): void (+1 overload)"},"doSomething")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.kt)("data-err",{parentName:"span"},(0,r.kt)("data-lsp",{parentName:"data-err",lsp:"const maybeIds: number | number[]"},"maybeIds")),"); "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Error")),(0,r.kt)("span",{parentName:"code",className:"error"},(0,r.kt)("span",{parentName:"span"},"No overload matches this call.\n Overload 1 of 2, '(id: number): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number'.\n Type 'number[]' is not assignable to type 'number'.\n Overload 2 of 2, '(ids: number[]): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number[]'.\n Type 'number' is not assignable to type 'number[]'."),(0,r.kt)("span",{parentName:"span",className:"code"},"2769")),(0,r.kt)("span",{parentName:"code",className:"error-behind"},"No overload matches this call.\n Overload 1 of 2, '(id: number): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number'.\n Type 'number[]' is not assignable to type 'number'.\n Overload 2 of 2, '(ids: number[]): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number[]'.\n Type 'number' is not assignable to type 'number[]'.")))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function doSomething(id: number): void (+1 overload)"},"doSomething")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) id: number"},"id")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},")"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"void"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function doSomething(ids: number[]): void (+1 overload)"},"doSomething")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) ids: number[]"},"ids")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[])"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"void"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function doSomething(id: number): void (+1 overload)"},"doSomething")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) ids: number | number[]"},"ids")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[])"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"void"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"declare"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const maybeIds: number | number[]"},"maybeIds")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[];")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function doSomething(id: number): void (+1 overload)"},"doSomething")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.kt)("data-err",{parentName:"span"},(0,r.kt)("data-lsp",{parentName:"data-err",lsp:"const maybeIds: number | number[]"},"maybeIds")),"); "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Error")),(0,r.kt)("span",{parentName:"code",className:"error"},(0,r.kt)("span",{parentName:"span"},"No overload matches this call.\n Overload 1 of 2, '(id: number): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number'.\n Type 'number[]' is not assignable to type 'number'.\n Overload 2 of 2, '(ids: number[]): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number[]'.\n Type 'number' is not assignable to type 'number[]'."),(0,r.kt)("span",{parentName:"span",className:"code"},"2769")),(0,r.kt)("span",{parentName:"code",className:"error-behind"},"No overload matches this call.\n Overload 1 of 2, '(id: number): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number'.\n Type 'number[]' is not assignable to type 'number'.\n Overload 2 of 2, '(ids: number[]): void', gave the following error.\n Argument of type 'number | number[]' is not assignable to parameter of type 'number[]'.\n Type 'number' is not assignable to type 'number[]'."))))),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function doSomething(ids: number | number[]): void"},"doSomething")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) ids: number | number[]"},"ids")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"[])"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"void"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ...")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"declare"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const maybeIds: number | number[]"},"maybeIds")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"[];")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function doSomething(ids: number | number[]): void"},"doSomething")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const maybeIds: number | number[]"},"maybeIds"),"); "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Error"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function doSomething(ids: number | number[]): void"},"doSomething")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) ids: number | number[]"},"ids")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[])"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"void"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ...")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"declare"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const maybeIds: number | number[]"},"maybeIds")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[];")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function doSomething(ids: number | number[]): void"},"doSomething")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const maybeIds: number | number[]"},"maybeIds"),"); "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Error")))))),(0,r.kt)("p",null,"In case the two overloads have very distinct semantics, name the parameter as ",(0,r.kt)("inlineCode",{parentName:"p"},"lengthOrElement")," instead of creating two overloads with different names."),(0,r.kt)("h2",{id:"generics"},"Generics"),(0,r.kt)("h3",{id:"consistent-generic-constructors"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/consistent-generic-constructors"},(0,r.kt)("inlineCode",{parentName:"a"},"consistent-generic-constructors"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Require ",(0,r.kt)("inlineCode",{parentName:"li"},"new Foo()")," syntax (",(0,r.kt)("inlineCode",{parentName:"li"},'"constructor"'),")")))),(0,r.kt)("p",null,"Use ",(0,r.kt)("inlineCode",{parentName:"p"},"const foo = new Foo()")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"const foo: Foo = new Foo()"),". It is shorter and less prone to refactoring."),(0,r.kt)("h3",{id:"no-array-constructor"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-array-constructor"},(0,r.kt)("inlineCode",{parentName:"a"},"no-array-constructor"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off"),(0,r.kt)("li",{parentName:"ul"},"Related:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/js-style-guide/eslint-base/collections#no-array-constructor"},(0,r.kt)("inlineCode",{parentName:"a"},"no-array-constructor")))))),(0,r.kt)("p",null,"We never allow the ",(0,r.kt)("inlineCode",{parentName:"p"},"Array")," constructor. Even in TypeScript, use ",(0,r.kt)("inlineCode",{parentName:"p"},"[] as T[]")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"Array()"),"."),(0,r.kt)("h3",{id:"no-unnecessary-type-constraint"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-unnecessary-type-constraint"},(0,r.kt)("inlineCode",{parentName:"a"},"no-unnecessary-type-constraint"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Do not write ",(0,r.kt)("inlineCode",{parentName:"p"},"T extends unknown")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"T extends any"),". They are completely redundant as of the latest TS version (",(0,r.kt)("inlineCode",{parentName:"p"},"T extends unknown")," may not be in older versions when generic types were non-nullable by default)."),(0,r.kt)("h3",{id:"no-unused-expressions"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-unused-expressions"},(0,r.kt)("inlineCode",{parentName:"a"},"no-unused-expressions"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Related:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/js-style-guide/eslint-base/control-flow#no-unused-expressions"},(0,r.kt)("inlineCode",{parentName:"a"},"no-unused-expressions")))))),(0,r.kt)("p",null,"See the base rule for more information. This extension rule is useful for TypeScript because it adds support for instantiation expressions. It is safe to use in JavaScript files because it does not change behaviors outside of TypeScript."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"foo"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"T"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},">"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"foo"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"T"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},">"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")))))),(0,r.kt)("h2",{id:"classes"},"Classes"),(0,r.kt)("h3",{id:"class-literal-property-style"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/class-literal-property-style"},(0,r.kt)("inlineCode",{parentName:"a"},"class-literal-property-style"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Require using getters for readonly fields (",(0,r.kt)("inlineCode",{parentName:"li"},'"getters"'),")")))),(0,r.kt)("p",null,"We require using getters for readonly fields."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"readonly")," only provides safety in TypeScript but does not interface well with JavaScript."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"readonly")," cannot be declared in JavaScript, so enforcing ",(0,r.kt)("inlineCode",{parentName:"li"},'"fields"')," may lead to unfixable errors in JavaScript."),(0,r.kt)("li",{parentName:"ul"},"Getters can be overridden in subclasses while fields may accidentally override subclass getters.")),(0,r.kt)("p",null,"Note that our ",(0,r.kt)("a",{parentName:"p",href:"/js-style-guide/eslint-base/objects-classes#accessor-pairs"},(0,r.kt)("inlineCode",{parentName:"a"},"accessor-pairs"))," rule requires every getter to have an accompanying setter. You may want to disable this in TypeScript to achieve compile-time readonliness."),(0,r.kt)("h3",{id:"explicit-member-accessibility"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/explicit-member-accessibility"},(0,r.kt)("inlineCode",{parentName:"a"},"explicit-member-accessibility"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,"Never annotate member accessibility. If you want private members, use ",(0,r.kt)("inlineCode",{parentName:"p"},"#")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"private"),". Public fields are allowed and not discouraged or unfavored over accessors."),(0,r.kt)("h3",{id:"no-dupe-class-members"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-dupe-class-members"},(0,r.kt)("inlineCode",{parentName:"a"},"no-dupe-class-members"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Related:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/js-style-guide/eslint-base/objects-classes#no-dupe-class-members"},(0,r.kt)("inlineCode",{parentName:"a"},"no-dupe-class-members")))))),(0,r.kt)("p",null,"This rule overrides the base rule to allow overloads. It is safe to use in JavaScript files because it does not change behaviors outside of TypeScript."),(0,r.kt)("h3",{id:"no-extraneous-class"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-extraneous-class"},(0,r.kt)("inlineCode",{parentName:"a"},"no-extraneous-class"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Do not allow classes with only constructors (",(0,r.kt)("inlineCode",{parentName:"li"},"allowConstructorOnly: true"),")"),(0,r.kt)("li",{parentName:"ul"},"Do not allow empty classes (",(0,r.kt)("inlineCode",{parentName:"li"},"allowEmpty true"),")"),(0,r.kt)("li",{parentName:"ul"},"Do not allow classes with only static members (",(0,r.kt)("inlineCode",{parentName:"li"},"allowStaticOnly: true"),")"),(0,r.kt)("li",{parentName:"ul"},"Do not allow classes with decorators (",(0,r.kt)("inlineCode",{parentName:"li"},"allowWithDecorator: true"),")")))),(0,r.kt)("p",null,"You should not use classes as namespaces. All classes should have at least one ",(0,r.kt)("em",{parentName:"p"},"method"),", because if it only contains fields, a factory function is probably better. Also consider whether the style of utility functions + data is better than a class."),(0,r.kt)("p",null,"Note that in JavaScript you may have false positives:"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"js"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},".a "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"js"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".a "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("p",null,"You should not do this in JavaScript. Add a field declaration to make the class statically analyzable\u2014this helps with performance by preventing unnecessary hidden class transitions."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"js"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"a"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},".a "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"js"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"a"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".a "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("h3",{id:"parameter-properties"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/parameter-properties"},(0,r.kt)("inlineCode",{parentName:"a"},"parameter-properties"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Always use class properties (",(0,r.kt)("inlineCode",{parentName:"li"},'prefer: "class-property"'),")"),(0,r.kt)("li",{parentName:"ul"},"Allow no exceptions (",(0,r.kt)("inlineCode",{parentName:"li"},"allow: []"),")")))),(0,r.kt)("p",null,"Don't use parameter properties because they don't save many characters but are non-standard. Different TypeScript versions may change the instantiation order and subtly break your code."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"b"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},".a; "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Will this work?")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"public"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"a"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {}")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"}),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"B"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"a"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"b"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"a"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},".a "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," a;")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},".b "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," a; "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// This will work")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"b"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".a; "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Will this work?")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"public"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"a"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {}")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"}),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"B"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"a"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"b"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"a"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".a "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a;")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".b "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a; "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// This will work")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("h2",{id:"enums"},"Enums"),(0,r.kt)("h3",{id:"prefer-enum-initializers"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/prefer-enum-initializers"},(0,r.kt)("inlineCode",{parentName:"a"},"prefer-enum-initializers"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Always use initializers for enum members. Without initializers, you may subtly break consumers' code if they rely on the exact value of each member."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"diff"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"enum Rights {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#116329"}},"+ NONE,")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," USER,")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ADMIN,")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"}),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"if (user.right === 1) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," // Before: user rights")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," // Now: no rights")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"diff"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"enum Rights {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"+ NONE,")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," USER,")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ADMIN,")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"}),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"if (user.right === 1) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," // Before: user rights")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," // Now: no rights")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("h3",{id:"prefer-literal-enum-member"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/prefer-literal-enum-member"},(0,r.kt)("inlineCode",{parentName:"a"},"prefer-literal-enum-member"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Allow bitwise enum members (",(0,r.kt)("inlineCode",{parentName:"li"},"allowBitwiseExpressions: true"),")")))),(0,r.kt)("p",null,"Using non-literal members is confusing because people may not expect enums to create naming scopes. If you want to declare enums depending on other variables, consider a namespace instead. We allow bitwise enum members because they are useful for flags."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"enum"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},"Flags"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," A "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"<<"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," B "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"<<"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," C "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"<<"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"enum"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"Flags"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," A "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"<<"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," B "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"<<"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," C "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"<<"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("h2",{id:"namespaces"},"Namespaces"),(0,r.kt)("h3",{id:"no-namespace"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-namespace"},(0,r.kt)("inlineCode",{parentName:"a"},"no-namespace"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,"We don't forbid namespaces. We think they enable interesting use cases such as aggregating types and values. However, we do not recommend using them as a way to organize code. Use ES modules instead. You should only use them if the namespace's name itself is part of the API."),(0,r.kt)("p",null,"However, if you use namespaces, don't use the ",(0,r.kt)("inlineCode",{parentName:"p"},"module")," keyword. This is enforced by the ",(0,r.kt)("a",{parentName:"p",href:"#prefer-namespace-keyword"},(0,r.kt)("inlineCode",{parentName:"a"},"prefer-namespace-keyword"))," rule."),(0,r.kt)("h3",{id:"prefer-namespace-keyword"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/prefer-namespace-keyword"},(0,r.kt)("inlineCode",{parentName:"a"},"prefer-namespace-keyword"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Always use ",(0,r.kt)("inlineCode",{parentName:"p"},"namespace")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"module"),". ",(0,r.kt)("inlineCode",{parentName:"p"},"module")," declarations are soon to be a JavaScript feature and will cause compatibility issues."),(0,r.kt)("h2",{id:"imports"},"Imports"),(0,r.kt)("h3",{id:"consistent-type-imports"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/consistent-type-imports"},(0,r.kt)("inlineCode",{parentName:"a"},"consistent-type-imports"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Allow ",(0,r.kt)("inlineCode",{parentName:"li"},": import(...)")," style (",(0,r.kt)("inlineCode",{parentName:"li"},"disallowTypeAnnotations: false"),")"),(0,r.kt)("li",{parentName:"ul"},"Fix to inline type imports (",(0,r.kt)("inlineCode",{parentName:"li"},'fixStyle: "inline-type-imports"'),")"),(0,r.kt)("li",{parentName:"ul"},"Require ",(0,r.kt)("inlineCode",{parentName:"li"},"import type")," syntax (",(0,r.kt)("inlineCode",{parentName:"li"},'prefer: "type-imports"'),")")))),(0,r.kt)("p",null,"Use ",(0,r.kt)("inlineCode",{parentName:"p"},"import type")," to clearly signal that the import is only used for type information. This is useful for import elision. We fix to inline type imports to avoid separate statements, and we always use non-legacy TypeScript versions. If all imports are fixed to inline type imports, ",(0,r.kt)("a",{parentName:"p",href:"#no-import-type-side-effects"},(0,r.kt)("inlineCode",{parentName:"a"},"no-import-type-side-effects"))," will fix this to ",(0,r.kt)("inlineCode",{parentName:"p"},"import type")," automatically."),(0,r.kt)("p",null,"We allow ",(0,r.kt)("inlineCode",{parentName:"p"},": import(...)")," style type annotations. This is useful in an ambient context where import statements are not allowed."),(0,r.kt)("h3",{id:"no-import-type-side-effects"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-import-type-side-effects"},(0,r.kt)("inlineCode",{parentName:"a"},"no-import-type-side-effects"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Do not write ",(0,r.kt)("inlineCode",{parentName:"p"},'import { type X } from "..."'),". Instead, always use ",(0,r.kt)("inlineCode",{parentName:"p"},"import type")," if only types are imported from the module. Note that this may spontaneously arise from auto-fixing ",(0,r.kt)("a",{parentName:"p",href:"#consistent-type-imports"},(0,r.kt)("inlineCode",{parentName:"a"},"consistent-type-imports"))," due to our use of ",(0,r.kt)("inlineCode",{parentName:"p"},'fixStyle: "inline-type-imports"'),"."),(0,r.kt)("h3",{id:"no-require-imports"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-require-imports"},(0,r.kt)("inlineCode",{parentName:"a"},"no-require-imports"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Disabled in JavaScript")),(0,r.kt)("p",null,"Do not use ",(0,r.kt)("inlineCode",{parentName:"p"},"require")," in TypeScript because if you use ",(0,r.kt)("inlineCode",{parentName:"p"},"const x = require(...)")," then there will be no types. ",(0,r.kt)("inlineCode",{parentName:"p"},"import x = require(...)")," is fully obscure with ",(0,r.kt)("inlineCode",{parentName:"p"},"esModuleInterop"),". However, you may use ",(0,r.kt)("inlineCode",{parentName:"p"},"require")," in JavaScript if you are authoring CommonJS."),(0,r.kt)("h3",{id:"no-var-requires"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-var-requires"},(0,r.kt)("inlineCode",{parentName:"a"},"no-var-requires"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Disabled in JavaScript")),(0,r.kt)("p",null,"Same as above, you should not use ",(0,r.kt)("inlineCode",{parentName:"p"},"require")," in TypeScript."),(0,r.kt)("h2",{id:"exports"},"Exports"),(0,r.kt)("h3",{id:"no-useless-empty-export"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-useless-empty-export"},(0,r.kt)("inlineCode",{parentName:"a"},"no-useless-empty-export"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Do not export an empty list unless it helps to make the file a module. If the file is a ",(0,r.kt)("inlineCode",{parentName:"p"},".ts")," file (not a declaration) and it contains other imports/exports, then this ",(0,r.kt)("inlineCode",{parentName:"p"},"export {};")," statement is not necessary."),(0,r.kt)("h2",{id:"type-annotations"},"Type annotations"),(0,r.kt)("h3",{id:"explicit-function-return-type"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/explicit-function-return-type"},(0,r.kt)("inlineCode",{parentName:"a"},"explicit-function-return-type"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,"We don't require explicit return types for functions. Let TypeScript infer as much as possible to reduce verboseness. We do require explicit module boundary types, though."),(0,r.kt)("h3",{id:"explicit-module-boundary-types"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/explicit-module-boundary-types"},(0,r.kt)("inlineCode",{parentName:"a"},"explicit-module-boundary-types"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning"),(0,r.kt)("li",{parentName:"ul"},"Disabled in JavaScript")),(0,r.kt)("p",null,'We require explicit module boundary types. This makes sure that any module boundary is type safe. Although 90% of the time this "boundary" is actually internal, it still helps us to prevent any accidental public API changes.'),(0,r.kt)("h3",{id:"typedef"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/typedef"},(0,r.kt)("inlineCode",{parentName:"a"},"typedef"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,"This rule is too strict and does not allow type inference. Let TypeScript infer types where it can, and only add types for consistency, clarity, or narrower types. Always compile with ",(0,r.kt)("inlineCode",{parentName:"p"},"noImplicitAny"),"."),(0,r.kt)("h2",{id:"type-assertions"},"Type assertions"),(0,r.kt)("h3",{id:"consistent-type-assertions"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/consistent-type-assertions"},(0,r.kt)("inlineCode",{parentName:"a"},"consistent-type-assertions"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Require ",(0,r.kt)("inlineCode",{parentName:"li"},"as T")," syntax (",(0,r.kt)("inlineCode",{parentName:"li"},'assertionStyle: "as"'),")"),(0,r.kt)("li",{parentName:"ul"},"Allow object literal values to have asserted type anywhere (",(0,r.kt)("inlineCode",{parentName:"li"},'objectLiteralTypeAssertions: "allow"'),")")))),(0,r.kt)("p",null,"Use ",(0,r.kt)("inlineCode",{parentName:"p"},"as T")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},""),". The latter is soft-deprecated because it does not work in JSX. The former is also easier to read and easier to search for."),(0,r.kt)("p",null,"We allow object literals to be asserted everywhere. We don't think there's any difference between ",(0,r.kt)("inlineCode",{parentName:"p"},"const x = {} as T")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"const x = y as T"),", so if the latter is allowed, so should the former."),(0,r.kt)("p",null,"However, remember ",(0,r.kt)("strong",{parentName:"p"},"use ",(0,r.kt)("inlineCode",{parentName:"strong"},"as T")," only when you are sure that the type is correct"),". It is not type safe and can lead to runtime errors."),(0,r.kt)("h3",{id:"no-confusing-non-null-assertion"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-confusing-non-null-assertion"},(0,r.kt)("inlineCode",{parentName:"a"},"no-confusing-non-null-assertion"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"You should never use ",(0,r.kt)("inlineCode",{parentName:"p"},"!")," in a comparison, because it does not change the comparison outcome or type checking."),(0,r.kt)("h3",{id:"no-extra-non-null-assertion"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-extra-non-null-assertion"},(0,r.kt)("inlineCode",{parentName:"a"},"no-extra-non-null-assertion"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Never use ",(0,r.kt)("inlineCode",{parentName:"p"},"!!")," because it is redundant. We don't forbid ",(0,r.kt)("inlineCode",{parentName:"p"},"!"),' so there\'s no point in screaming "this is really non-null!!"'),(0,r.kt)("h3",{id:"no-non-null-asserted-nullish-coalescing"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-non-null-asserted-nullish-coalescing"},(0,r.kt)("inlineCode",{parentName:"a"},"no-non-null-asserted-nullish-coalescing"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Do not use non-null assertions on a nullish coalescing LHS. This defeats the purpose."),(0,r.kt)("h3",{id:"no-non-null-asserted-optional-chain"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-non-null-asserted-optional-chain"},(0,r.kt)("inlineCode",{parentName:"a"},"no-non-null-asserted-optional-chain"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Do not use non-null assertions at the end of an optional chain. Sometimes this is necessary, for example, when passing a value to a function that actually handles ",(0,r.kt)("inlineCode",{parentName:"p"},"undefined")," but does not declare it in the type, but in most cases, it is not necessary and doing so masks potential bugs."),(0,r.kt)("h3",{id:"no-non-null-assertion"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-non-null-assertion"},(0,r.kt)("inlineCode",{parentName:"a"},"no-non-null-assertion"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,"There are a significant number of places where non-null assertions are inevitable:"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Weak built-in types")),(0,r.kt)("p",null,"Some TypeScript lib types are not accurate. One common example is regular expressions. The discussion is in ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/microsoft/TypeScript/issues/32098"},"microsoft/TypeScript#32098"),"."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const author: string | undefined"},"author")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const commit: string"},"commit"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) String.match(matcher: {\n [Symbol.match](string: string): RegExpMatchArray | null;\n}): RegExpMatchArray | null (+1 overload)"},"match")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"/(?<"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"name"),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},">"),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"."),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"+"),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"),(?<"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"time"),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},">"),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"\\d"),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"+"),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},")/"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},")?.",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(property) RegExpMatchArray.groups?: {\n [key: string]: string;\n} | undefined"},"groups"),".",(0,r.kt)("data-lsp",{parentName:"span",lsp:"string | undefined"},"name"),";")),(0,r.kt)("span",{parentName:"code",className:"error"},(0,r.kt)("span",{parentName:"span"},"Object is possibly 'undefined'."),(0,r.kt)("span",{parentName:"span",className:"code"},"2532")),(0,r.kt)("span",{parentName:"code",className:"error-behind"},"Object is possibly 'undefined'."),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// But I know that `name` always exists in `groups`!"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const author: string | undefined"},"author")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const commit: string"},"commit"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) String.match(matcher: {\n [Symbol.match](string: string): RegExpMatchArray | null;\n}): RegExpMatchArray | null (+1 overload)"},"match")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/(?<"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"name"),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},">"),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"."),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"+"),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"),(?<"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"time"),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},">"),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"\\d"),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"+"),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},")/"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},")?.",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(property) RegExpMatchArray.groups?: {\n [key: string]: string;\n} | undefined"},"groups"),".",(0,r.kt)("data-lsp",{parentName:"span",lsp:"string | undefined"},"name"),";")),(0,r.kt)("span",{parentName:"code",className:"error"},(0,r.kt)("span",{parentName:"span"},"Object is possibly 'undefined'."),(0,r.kt)("span",{parentName:"span",className:"code"},"2532")),(0,r.kt)("span",{parentName:"code",className:"error-behind"},"Object is possibly 'undefined'."),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// But I know that `name` always exists in `groups`!")))))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Control-flow analysis failure")),(0,r.kt)("p",null,"Control-flow analysis is not preserved across callback boundaries, because TypeScript cannot predict when a callback will be called. See ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/microsoft/TypeScript/issues/9998"},"microsoft/TypeScript#9998")),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"import"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," { ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(alias) function useRef(initialValue: T): MutableRefObject (+2 overloads)\nimport useRef"},"useRef")," } "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"from"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"react"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function useDemo(): void"},"useDemo")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const ref: React.RefObject<(a: number) => void>"},"ref")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(alias) useRef<(a: number) => void>(initialValue: ((a: number) => void) | null): React.RefObject<(a: number) => void> (+2 overloads)\nimport useRef"},"useRef")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"<("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: number"},"a")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"void"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},">("),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const ref: React.RefObject<(a: number) => void>"},"ref"),".",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(property) React.RefObject<(a: number) => void>.current: ((a: number) => void) | null"},"current"),") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Do other stuff...")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ["),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"]."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) Array.forEach(callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any): void"},"forEach")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: number"},"a")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const ref: React.RefObject<(a: number) => void>"},"ref"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(property) React.RefObject<(a: number) => void>.current: ((a: number) => void) | null"},"current")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: number"},"a"),"));")),(0,r.kt)("span",{parentName:"code",className:"error"},(0,r.kt)("span",{parentName:"span"},"Cannot invoke an object which is possibly 'null'."),(0,r.kt)("span",{parentName:"span",className:"code"},"2721")),(0,r.kt)("span",{parentName:"code",className:"error-behind"},"Cannot invoke an object which is possibly 'null'."),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// But I just checked `ref.current`!")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"import"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(alias) function useRef(initialValue: T): MutableRefObject (+2 overloads)\nimport useRef"},"useRef")," } "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"from"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"react"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function useDemo(): void"},"useDemo")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const ref: React.RefObject<(a: number) => void>"},"ref")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(alias) useRef<(a: number) => void>(initialValue: ((a: number) => void) | null): React.RefObject<(a: number) => void> (+2 overloads)\nimport useRef"},"useRef")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: number"},"a")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"void"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},">("),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const ref: React.RefObject<(a: number) => void>"},"ref"),".",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(property) React.RefObject<(a: number) => void>.current: ((a: number) => void) | null"},"current"),") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Do other stuff...")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ["),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"]."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) Array.forEach(callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any): void"},"forEach")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: number"},"a")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const ref: React.RefObject<(a: number) => void>"},"ref"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(property) React.RefObject<(a: number) => void>.current: ((a: number) => void) | null"},"current")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: number"},"a"),"));")),(0,r.kt)("span",{parentName:"code",className:"error"},(0,r.kt)("span",{parentName:"span"},"Cannot invoke an object which is possibly 'null'."),(0,r.kt)("span",{parentName:"span",className:"code"},"2721")),(0,r.kt)("span",{parentName:"code",className:"error-behind"},"Cannot invoke an object which is possibly 'null'."),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// But I just checked `ref.current`!")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Clearer developer intention")),(0,r.kt)("p",null,"Sometimes, you are really sure that a value exists, but TypeScript doesn't believe you."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:'const managers: readonly [{\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n}, {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n}, {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}]'},"managers")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," [")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," { ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) name: "npm"'},"name"),": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"npm"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "package-lock.json"'},"lockFile"),": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"package-lock.json"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," { ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) name: "yarn"'},"name"),": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"yarn"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "yarn.lock"'},"lockFile"),": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"yarn.lock"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," { ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) name: "pnpm"'},"name"),": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"pnpm"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "pnpm-lock.yaml"'},"lockFile"),": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"pnpm-lock.yaml"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"] "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"as"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:'type const = readonly [{\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n}, {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n}, {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}]'},"const")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:'const lockFile: "package-lock.json" | "yarn.lock" | "pnpm-lock.yaml"'},"lockFile")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'const managers: readonly [{\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n}, {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n}, {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}]'},"managers"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:'(method) ReadonlyArray<{ readonly name: "npm"; readonly lockFile: "package-lock.json"; } | { readonly name: "yarn"; readonly lockFile: "yarn.lock"; } | { readonly name: "pnpm"; readonly lockFile: "pnpm-lock.yaml"; }>.find(predicate: (value: {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n} | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}, index: number, obj: readonly ({\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | ... 1 more ... | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n})[]) => unknown, thisArg?: any): {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | ... 2 more ... | undefined (+1 overload)'},"find")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:'(parameter) obj: {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n} | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}'},"obj")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(parameter) obj: {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n} | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}'},"obj"),".",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) name: "npm" | "yarn" | "pnpm"'},"name")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"npm"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},").",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "package-lock.json" | "yarn.lock" | "pnpm-lock.yaml"'},"lockFile"),";")),(0,r.kt)("span",{parentName:"code",className:"error"},(0,r.kt)("span",{parentName:"span"},"Object is possibly 'undefined'."),(0,r.kt)("span",{parentName:"span",className:"code"},"2532")),(0,r.kt)("span",{parentName:"code",className:"error-behind"},"Object is possibly 'undefined'."),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// It absolutely exists, but making it strongly typed is unnecessary trouble"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:'const managers: readonly [{\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n}, {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n}, {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}]'},"managers")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," [")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) name: "npm"'},"name"),": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"npm"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "package-lock.json"'},"lockFile"),": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"package-lock.json"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) name: "yarn"'},"name"),": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"yarn"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "yarn.lock"'},"lockFile"),": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"yarn.lock"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) name: "pnpm"'},"name"),": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"pnpm"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "pnpm-lock.yaml"'},"lockFile"),": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"pnpm-lock.yaml"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"] "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"as"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:'type const = readonly [{\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n}, {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n}, {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}]'},"const")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:'const lockFile: "package-lock.json" | "yarn.lock" | "pnpm-lock.yaml"'},"lockFile")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'const managers: readonly [{\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n}, {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n}, {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}]'},"managers"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:'(method) ReadonlyArray<{ readonly name: "npm"; readonly lockFile: "package-lock.json"; } | { readonly name: "yarn"; readonly lockFile: "yarn.lock"; } | { readonly name: "pnpm"; readonly lockFile: "pnpm-lock.yaml"; }>.find(predicate: (value: {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n} | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}, index: number, obj: readonly ({\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | ... 1 more ... | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n})[]) => unknown, thisArg?: any): {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | ... 2 more ... | undefined (+1 overload)'},"find")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:'(parameter) obj: {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n} | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}'},"obj")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(parameter) obj: {\n readonly name: "npm";\n readonly lockFile: "package-lock.json";\n} | {\n readonly name: "yarn";\n readonly lockFile: "yarn.lock";\n} | {\n readonly name: "pnpm";\n readonly lockFile: "pnpm-lock.yaml";\n}'},"obj"),".",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) name: "npm" | "yarn" | "pnpm"'},"name")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"npm"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},").",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(property) lockFile: "package-lock.json" | "yarn.lock" | "pnpm-lock.yaml"'},"lockFile"),";")),(0,r.kt)("span",{parentName:"code",className:"error"},(0,r.kt)("span",{parentName:"span"},"Object is possibly 'undefined'."),(0,r.kt)("span",{parentName:"span",className:"code"},"2532")),(0,r.kt)("span",{parentName:"code",className:"error-behind"},"Object is possibly 'undefined'."),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// It absolutely exists, but making it strongly typed is unnecessary trouble")))))),(0,r.kt)("p",null,"This is also related to the previous two points in many cases, but in other cases where TypeScript cannot ensure existence with control-flow analysis, we need to convey developer intent through allowing ",(0,r.kt)("inlineCode",{parentName:"p"},"undefined")," or not."),(0,r.kt)("h3",{id:"prefer-as-const"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/prefer-as-const"},(0,r.kt)("inlineCode",{parentName:"a"},"prefer-as-const"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Use ",(0,r.kt)("inlineCode",{parentName:"p"},"x as const")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"x as x")," when ",(0,r.kt)("inlineCode",{parentName:"p"},"x")," is a literal. This is because ",(0,r.kt)("inlineCode",{parentName:"p"},"as const")," is more type safe and more readable."),(0,r.kt)("h2",{id:"ts-comments"},"TS comments"),(0,r.kt)("h3",{id:"ban-ts-comment"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/array-type"},(0,r.kt)("inlineCode",{parentName:"a"},"ban-ts-comment"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Allow ",(0,r.kt)("inlineCode",{parentName:"li"},"@ts-check"),"; require ",(0,r.kt)("inlineCode",{parentName:"li"},"@ts-expect-error")," to have a description; disallow ",(0,r.kt)("inlineCode",{parentName:"li"},"@ts-ignore")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"@ts-nocheck")),(0,r.kt)("li",{parentName:"ul"},"Require descriptions to be at least 3 characters long (",(0,r.kt)("inlineCode",{parentName:"li"},"minimumDescriptionLength: 3"),")")))),(0,r.kt)("p",null,"You should never use ",(0,r.kt)("inlineCode",{parentName:"p"},"@ts-ignore")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"@ts-nocheck"),". They completely turn off the checker and have no sense of granularity. ",(0,r.kt)("inlineCode",{parentName:"p"},"@ts-expect-error")," is better because it requires an error to be present, but it is still dangerous an should only be applied when there cannot be any other type errors."),(0,r.kt)("h3",{id:"prefer-ts-expect-error"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/prefer-ts-expect-error"},(0,r.kt)("inlineCode",{parentName:"a"},"prefer-ts-expect-error"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Use ",(0,r.kt)("inlineCode",{parentName:"p"},"@ts-expect-error")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"@ts-ignore")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"@ts-nocheck"),". This rule can auto-fix ",(0,r.kt)("inlineCode",{parentName:"p"},"@ts-ignore")," to ",(0,r.kt)("inlineCode",{parentName:"p"},"@ts-expect-error"),"."),(0,r.kt)("h3",{id:"triple-slash-reference"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/triple-slash-reference"},(0,r.kt)("inlineCode",{parentName:"a"},"triple-slash-reference"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Never allow ",(0,r.kt)("inlineCode",{parentName:"li"},'/// ')," (",(0,r.kt)("inlineCode",{parentName:"li"},'lib: "never"'),")"),(0,r.kt)("li",{parentName:"ul"},"Never allow ",(0,r.kt)("inlineCode",{parentName:"li"},'/// ')," (",(0,r.kt)("inlineCode",{parentName:"li"},'path: "never"'),")"),(0,r.kt)("li",{parentName:"ul"},"Allow ",(0,r.kt)("inlineCode",{parentName:"li"},'/// ')," when the file has no import (",(0,r.kt)("inlineCode",{parentName:"li"},'types: "prefer-import"'),")")))),(0,r.kt)("p",null,"You should generally use modules instead of triple-slash references. ",(0,r.kt)("inlineCode",{parentName:"p"},'/// ')," can be substituted with a side-effect import. ",(0,r.kt)("inlineCode",{parentName:"p"},'/// ')," can be substituted with the ",(0,r.kt)("inlineCode",{parentName:"p"},"lib")," compiler option. ",(0,r.kt)("inlineCode",{parentName:"p"},'/// ')," can be substituted with an import, except when you want to load ambient declarations, such as ",(0,r.kt)("inlineCode",{parentName:"p"},"declare module")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"declare global"),". In this case, the triple slash reference should always live in an ambient declaration itself."),(0,r.kt)("h2",{id:"plain-javascript"},"Plain JavaScript"),(0,r.kt)("p",null,"These rules probably shouldn't be in typescript-eslint in the first place."),(0,r.kt)("h3",{id:"no-dynamic-delete"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-dynamic-delete"},(0,r.kt)("inlineCode",{parentName:"a"},"no-dynamic-delete"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"delete")," is necessary for transforming objects:"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"for"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"key"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"of"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Object"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"keys"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(obj)) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"delete"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," obj[key];")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"for"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"key"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"of"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Object"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"keys"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(obj)) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"delete"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," obj[key];")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("h3",{id:"no-this-alias"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/no-this-alias"},(0,r.kt)("inlineCode",{parentName:"a"},"no-this-alias"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warn"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Allow destructuring values from ",(0,r.kt)("inlineCode",{parentName:"li"},"this")," (",(0,r.kt)("inlineCode",{parentName:"li"},"allowDestructuring: true"),")"),(0,r.kt)("li",{parentName:"ul"},"Do not allow any particular alias (",(0,r.kt)("inlineCode",{parentName:"li"},"allowedNames: []"),")"))),(0,r.kt)("li",{parentName:"ul"},"Related:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/js-style-guide/eslint-base/functions#consistent-this"},(0,r.kt)("inlineCode",{parentName:"a"},"consistent-this")))))),(0,r.kt)("p",null,"You should generally avoid ",(0,r.kt)("inlineCode",{parentName:"p"},"this")," aliasing because it is rare to rely on nested ",(0,r.kt)("inlineCode",{parentName:"p"},"this")," values. In case when this is actually necessary, you should use a semantic name instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"self")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"that"),"."),(0,r.kt)("h3",{id:"prefer-for-of"},(0,r.kt)("a",{parentName:"h3",href:"https://typescript-eslint.io/rules/prefer-for-of"},(0,r.kt)("inlineCode",{parentName:"a"},"prefer-for-of"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"Use a ",(0,r.kt)("inlineCode",{parentName:"p"},"for-of")," loop instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"for")," when the pattern is clearly convertible. Note that this rule is not 100% safe as not every indexed collection is iterable."))}c.isMDXComponent=!0},5318:(e,a,t)=>{t.d(a,{Zo:()=>d,kt:()=>N});var n=t(7378);function r(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function l(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function s(e){for(var a=1;a=0||(r[t]=e[t]);return r}(e,a);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=n.createContext({}),i=function(e){var a=n.useContext(p),t=a;return e&&(t="function"==typeof e?e(a):s(s({},a),e)),t},d=function(e){var a=i(e.components);return n.createElement(p.Provider,{value:a},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},k=n.forwardRef((function(e,a){var t=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),m=i(t),k=r,N=m["".concat(p,".").concat(k)]||m[k]||c[k]||l;return t?n.createElement(N,s(s({ref:a},d),{},{components:t})):n.createElement(N,s({ref:a},d))}));function N(e,a){var t=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var l=t.length,s=new Array(l);s[0]=k;var o={};for(var p in a)hasOwnProperty.call(a,p)&&(o[p]=a[p]);o.originalType=e,o[m]="string"==typeof e?e:r,s[1]=o;for(var i=2;i{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=a(2685),r=(a(7378),a(5318));const l={sidebar_position:1},o="General formatting",i={unversionedId:"eslint-base/formatting",id:"eslint-base/formatting",title:"General formatting",description:"Code formatting is completely Prettier-powered. Some Prettier configuration options that can be contended are explained below. We only use ESLint to enforce some formatting rules that Prettier cannot handle, mostly around curly braces and comments.",source:"@site/../docs/eslint-base/formatting.md",sourceDirName:"eslint-base",slug:"/eslint-base/formatting",permalink:"/js-style-guide/eslint-base/formatting",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"defaultSidebar",previous:{title:"Base rules",permalink:"/js-style-guide/eslint-base/"},next:{title:"Literals",permalink:"/js-style-guide/eslint-base/literals"}},s={},p=[{value:"Dimensions",id:"dimensions",level:2},{value:"Quotes",id:"quotes",level:2},{value:"Other punctuation",id:"other-punctuation",level:2},{value:"Curly braces",id:"curly-braces",level:2},{value:"curly",id:"curly",level:3},{value:"Comments",id:"comments",level:2},{value:"capitalized-comments",id:"capitalized-comments",level:3},{value:"max-len",id:"max-len",level:3},{value:"multiline-comment-style",id:"multiline-comment-style",level:3},{value:"no-inline-comments",id:"no-inline-comments",level:3},{value:"no-warning-comments",id:"no-warning-comments",level:3},{value:"spaced-comment",id:"spaced-comment",level:3},{value:"Whitespace",id:"whitespace",level:2},{value:"no-irregular-whitespace",id:"no-irregular-whitespace",level:3},{value:"no-unexpected-multiline",id:"no-unexpected-multiline",level:3}],m={toc:p},d="wrapper";function c(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"general-formatting"},"General formatting"),(0,r.kt)("p",null,"Code formatting is completely ",(0,r.kt)("strong",{parentName:"p"},"Prettier-powered"),". Some Prettier configuration options that can be contended are explained below. We only use ESLint to enforce some formatting rules that Prettier cannot handle, mostly around curly braces and comments."),(0,r.kt)("h2",{id:"dimensions"},"Dimensions"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"printWidth")," is the default ",(0,r.kt)("inlineCode",{parentName:"p"},"80"),". ",(0,r.kt)("inlineCode",{parentName:"p"},"100")," seems a bit too dense, especially when we are pursuing ",(0,r.kt)("strong",{parentName:"p"},"minimal code area")," that can result in very few blank lines and lone-character lines. 80 characters is also the line length used in the GitHub diff viewer and helps make the diff clean."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"useTabs")," is turned off. While there have been many valid arguments in favor of tabs (a powerful one is accessibility\u2014some need larger tab spacing while others need smaller ones because their fonts are so big), using variable tab widths inevitably means broken formatting in some cases where the alignment is adjusted based on a fixed tab width. The ",(0,r.kt)("inlineCode",{parentName:"p"},"tabWidth")," is the default ",(0,r.kt)("inlineCode",{parentName:"p"},"2"),". Due to the deeply nested nature of common constructs like JSX and callbacks, 4-space indentation will soon bloat up the file."),(0,r.kt)("h2",{id:"quotes"},"Quotes"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"singleQuote")," is the default ",(0,r.kt)("inlineCode",{parentName:"p"},"false"),"\u2014we use double quotes. Some reasons are listed below:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"JSX props are commonly double-quoted, and it's good to keep consistency in other cases."),(0,r.kt)("li",{parentName:"ul"},"Strings in many languages are double-quoted, with single quotes representing characters. Since JC-verse is multi-lingual, keeping a consistent formatting is worthwhile."),(0,r.kt)("li",{parentName:"ul"},"Single quotes (for contractions: ",(0,r.kt)("inlineCode",{parentName:"li"},'"I\'m Josh"'),") within a string is much more common than double quotes, so using double quotes reduces the need to escape or manually convert quotes to avoid parsing failures.")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"quoteProps")," is the default ",(0,r.kt)("inlineCode",{parentName:"p"},"as-needed"),". We don't want to add extra quotes, because non-quoted props are more beautifully highlighted in editors, and provide more visual contrast compared to the property values."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"jsxSingleQuote")," is the default ",(0,r.kt)("inlineCode",{parentName:"p"},"false"),". HTML is almost uniformly using double quotes, and we follow that convention in JSX."),(0,r.kt)("h2",{id:"other-punctuation"},"Other punctuation"),(0,r.kt)("p",null,"We mandate semicolons with the default ",(0,r.kt)("inlineCode",{parentName:"p"},"semi: true"),". Some reasons are listed below:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Some people argue that ASI rules are very easy to remember and practice. That is true. However, it adds unnecessary mental burden to actually practice things like "insert leading semis" just to please ASI.'),(0,r.kt)("li",{parentName:"ul"},"Inserting leading semis is incredibly ugly."),(0,r.kt)("li",{parentName:"ul"},"Hitting a semicolon asserts the end of a statement and provides a sense of completion."),(0,r.kt)("li",{parentName:"ul"},"Semis are required in many languages and usually optional in others. We value cross-language consistency.")),(0,r.kt)("p",null,"We require trailing commas in all cases through ",(0,r.kt)("inlineCode",{parentName:"p"},'trailingComma: "all"'),", which is different from the default ",(0,r.kt)("inlineCode",{parentName:"p"},'"es5"'),". We use transpilers to ensure compatibility, but we value the minimal diff and ease to rearrange members that trailing commas provide."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"diff"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"const candidates = [")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#116329"}},'+ "ESLint",')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},' "React",')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},' "Prettier",')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},' "TypeScript",')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#82071E"}},'- "ESLint",')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"];"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"diff"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"const candidates = [")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#7EE787"}},'+ "ESLint",')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},' "React",')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},' "Prettier",')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},' "TypeScript",')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FFA198"}},'- "ESLint",')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"];")))))),(0,r.kt)("p",null,"Object literals are separated by spaces with the default ",(0,r.kt)("inlineCode",{parentName:"p"},"bracketSpacing: true"),". This improves readability, since otherwise, object literals can be easily confused with blocks, and the number of members will make the boundaries hard to notice."),(0,r.kt)("p",null,"JSX opening tags' closing brackets are kept at the end of the last line with ",(0,r.kt)("inlineCode",{parentName:"p"},"bracketSameLine: true"),", which is different from the default. This is because of ",(0,r.kt)("strong",{parentName:"p"},"minimal code area")," and we believe the readability is not detracted, while a lone ",(0,r.kt)("inlineCode",{parentName:"p"},">")," is often weird-looking."),(0,r.kt)("p",null,"Arrow functions' parentheses are always required with the default ",(0,r.kt)("inlineCode",{parentName:"p"},'arrowParens: "always"'),". This means minimal effort to add a parameter, and also to annotate the return type of the function."),(0,r.kt)("h2",{id:"curly-braces"},"Curly braces"),(0,r.kt)("h3",{id:"curly"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/curly"},(0,r.kt)("inlineCode",{parentName:"a"},"curly"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning- Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Require omitting braces only when the body is a single-line statement (",(0,r.kt)("inlineCode",{parentName:"li"},'"multi-or-nest"'),")"),(0,r.kt)("li",{parentName:"ul"},"Require ",(0,r.kt)("inlineCode",{parentName:"li"},"if")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"else")," to have consistent curly braces (",(0,r.kt)("inlineCode",{parentName:"li"},'"consistent"'),")")))),(0,r.kt)("p",null,"We want to omit curly braces for single-line statements, because they are more concise."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (foo) "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"bar"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"!"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"a) "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doX"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"()) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"b"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doX"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (b "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"!=="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"Nonexistent"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"`Result: ${"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"b"),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (foo) "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"bar"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"!"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"a) "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doX"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"()) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"b"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doX"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (b "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"!=="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"Nonexistent"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`Result: ${"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"b"),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("p",null,"However, omitting curly braces when the body is multi-line could quickly make the code lose focus, as is this example:"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"!"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"foo)")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," foo "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," bar: "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," qux: "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }; "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Where does the block end? Where does the assignment end?"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"!"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"foo)")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," foo "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," bar: "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," qux: "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }; "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Where does the block end? Where does the assignment end?")))))),(0,r.kt)("h2",{id:"comments"},"Comments"),(0,r.kt)("h3",{id:"capitalized-comments"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/capitalized-comments"},(0,r.kt)("inlineCode",{parentName:"a"},"capitalized-comments"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning- Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Always require capitalization (",(0,r.kt)("inlineCode",{parentName:"li"},'"always"'),")"),(0,r.kt)("li",{parentName:"ul"},"Allow multi-line comments (",(0,r.kt)("inlineCode",{parentName:"li"},"ignoreConsecutiveComments: true"),")"),(0,r.kt)("li",{parentName:"ul"},"Do not ignore inline comments (",(0,r.kt)("inlineCode",{parentName:"li"},"ignoreInlineComments: false"),")"),(0,r.kt)("li",{parentName:"ul"},"Ignore common ignore directives (",(0,r.kt)("inlineCode",{parentName:"li"},'ignorePattern: "prettier-ignore|cSpell:ignore"'),")")))),(0,r.kt)("p",null,"Comments should be written in a prose-like format, with proper grammar and capitalization. Even for sentence fragments, capitalize the first word."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// This should be a line of comment explaining why we need to apply the")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// transformation `doX` on `b`.")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"a"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doX"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(b); "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Even here\u2014capitalize the first word"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// This should be a line of comment explaining why we need to apply the")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// transformation `doX` on `b`.")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"a"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doX"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(b); "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Even here\u2014capitalize the first word")))))),(0,r.kt)("h3",{id:"max-len"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-len"},(0,r.kt)("inlineCode",{parentName:"a"},"max-len"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Only consider comments (",(0,r.kt)("inlineCode",{parentName:"li"},"code: Infinity, comments: 80"),")"),(0,r.kt)("li",{parentName:"ul"},"Ignore disable directives, JSDoc, and URLs (",(0,r.kt)("inlineCode",{parentName:"li"},'ignorePattern: "(eslint-disable|@)", ignoreUrls: true'),")")))),(0,r.kt)("p",null,"This makes the comments more consistent with the rest of the code, and also ensures that writing very long comments can still be formatted nicely. Note that this usually requires manual fixing as most formatters don't wrap comments."),(0,r.kt)("p",null,"If a comment line only crosses the 80-character limit by one word, consider rephrasing the comment to make it below 80 characters, or wrap two words to the next line."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Theoretically, we can only wrap 1 word for this line, but we wrap 2")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// for aesthetics."))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Theoretically, we can only wrap 1 word for this line, but we wrap 2")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// for aesthetics.")))))),(0,r.kt)("h3",{id:"multiline-comment-style"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/multiline-comment-style"},(0,r.kt)("inlineCode",{parentName:"a"},"multiline-comment-style"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Require each line to begin with ",(0,r.kt)("inlineCode",{parentName:"li"},"//")," (",(0,r.kt)("inlineCode",{parentName:"li"},'"separate-lines"'),")")))),(0,r.kt)("p",null,"We use single-line comments, because otherwise, if we wrap comments at 80 characters, adding a few words may result in changing the entire comment's style, which is unfavorable. In addition, commenting out a chunk of text only requires ",(0,r.kt)("kbd",null,"\u2318")," + ",(0,r.kt)("kbd",null,"/"),"."),(0,r.kt)("p",null,"An exception to this rule is JSDoc comments."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Some long comment explaining what this line is doing. The longer, the better\u2014")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// we want you to use eloquent language and proper grammar.")),(0,r.kt)("div",{parentName:"code",className:"line"}),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"/**")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}}," * JSDoc which shows up in editors.")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}}," *")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}}," * "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"@param"),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"foo"),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}}," - The foo")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}}," */"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Some long comment explaining what this line is doing. The longer, the better\u2014")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// we want you to use eloquent language and proper grammar.")),(0,r.kt)("div",{parentName:"code",className:"line"}),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"/**")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}}," * JSDoc which shows up in editors.")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}}," *")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}}," * "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"@param"),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"foo"),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}}," - The foo")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}}," */")))))),(0,r.kt)("h3",{id:"no-inline-comments"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-inline-comments"},(0,r.kt)("inlineCode",{parentName:"a"},"no-inline-comments"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,"You should avoid using ",(0,r.kt)("inlineCode",{parentName:"p"},"/* ... */")," style comments anywhere. However this rule also reports the following pattern:"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"a"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// The purpose of a"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"a"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// The purpose of a")))))),(0,r.kt)("p",null,"which is actually encouraged. Therefore, you need to execute your own discretion."),(0,r.kt)("h3",{id:"no-warning-comments"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-warning-comments"},(0,r.kt)("inlineCode",{parentName:"a"},"no-warning-comments"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,"You are free to commit ",(0,r.kt)("inlineCode",{parentName:"p"},"FIXME")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"TODO")," comments so they get fixed in an indefinite time in the future. If you want a way to track them, use an editor extension like TODO tree."),(0,r.kt)("h3",{id:"spaced-comment"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/spaced-comment"},(0,r.kt)("inlineCode",{parentName:"a"},"spaced-comment"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Require a space after ",(0,r.kt)("inlineCode",{parentName:"li"},"//")," (",(0,r.kt)("inlineCode",{parentName:"li"},'"always"'),")"),(0,r.kt)("li",{parentName:"ul"},"Require spaces padding for ",(0,r.kt)("inlineCode",{parentName:"li"},"/* */")," (",(0,r.kt)("inlineCode",{parentName:"li"},"block.balanced: true"),")"),(0,r.kt)("li",{parentName:"ul"},"Allow no comment-pattern exceptions (",(0,r.kt)("inlineCode",{parentName:"li"},"exceptions: []"),")"),(0,r.kt)("li",{parentName:"ul"},"Allow the following to appear at the beginning of line comments without space: ",(0,r.kt)("inlineCode",{parentName:"li"},'"=", "!", "/"')),(0,r.kt)("li",{parentName:"ul"},"Allow the following to appear at the beginning of block comments without space: ",(0,r.kt)("inlineCode",{parentName:"li"},'"=", "!", ":", "::"'))))),(0,r.kt)("p",null,"You should always have a space after ",(0,r.kt)("inlineCode",{parentName:"p"},"//")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"/*"),". This makes the text easier to read. The exceptions here are to support common patterns, such as ",(0,r.kt)("inlineCode",{parentName:"p"},"///")," for TS triple-slash directives, and ",(0,r.kt)("inlineCode",{parentName:"p"},"/*::")," for Flow type annotations."),(0,r.kt)("h2",{id:"whitespace"},"Whitespace"),(0,r.kt)("h3",{id:"no-irregular-whitespace"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-irregular-whitespace"},(0,r.kt)("inlineCode",{parentName:"a"},"no-irregular-whitespace"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Allow irregular whitespace nowhere (",(0,r.kt)("inlineCode",{parentName:"li"},"skipComments: false, skipJSXText: false, skipRegExps: false, skipStrings: false, skipTemplates: false"),")")))),(0,r.kt)("p",null,"Irregular whitespace is a common source of bugs. It's easy to accidentally copy a non-breaking space from a website, or to accidentally type a non-breaking space. In addition, code might subtly break if someone else tries to na\xefvely retype the code themselves instead of copy-pasting it."),(0,r.kt)("h3",{id:"no-unexpected-multiline"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unexpected-multiline"},(0,r.kt)("inlineCode",{parentName:"a"},"no-unexpected-multiline"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"You may accidentally forget a semicolon and end up with code like:"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"hello"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"world"')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"["),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"]."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"forEach"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(addNumber);"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"hello"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"world"')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"["),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"]."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"forEach"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(addNumber);")))))),(0,r.kt)("p",null,"This rule prevents code that does not look idiomatic. Prettier may help by making the code more obvious:"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"hello"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"world"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"[("),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},")]."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"forEach"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(addNumber);"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"hello"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"world"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[("),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},")]."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"forEach"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(addNumber);")))))),(0,r.kt)("p",null,"But we believe more immediate feedback is better."))}c.isMDXComponent=!0},5318:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>N});var n=a(7378);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},m=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),d=p(a),k=r,N=d["".concat(s,".").concat(k)]||d[k]||c[k]||l;return a?n.createElement(N,o(o({ref:t},m),{},{components:a})):n.createElement(N,o({ref:t},m))}));function N(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,o=new Array(l);o[0]=k;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[d]="string"==typeof e?e:r,o[1]=i;for(var p=2;p{n.d(a,{xA:()=>y,yg:()=>g});var t=n(3696);function r(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function l(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}function o(e){for(var a=1;a=0||(r[n]=e[n]);return r}(e,a);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=t.createContext({}),p=function(e){var a=t.useContext(s),n=a;return e&&(n="function"==typeof e?e(a):o(o({},a),e)),n},y=function(e){var a=p(e.components);return t.createElement(s.Provider,{value:a},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},c=t.forwardRef((function(e,a){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,y=i(e,["components","mdxType","originalType","parentName"]),m=p(n),c=r,g=m["".concat(s,".").concat(c)]||m[c]||d[c]||l;return n?t.createElement(g,o(o({ref:a},y),{},{components:n})):t.createElement(g,o({ref:a},y))}));function g(e,a){var n=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=c;var i={};for(var s in a)hasOwnProperty.call(a,s)&&(i[s]=a[s]);i.originalType=e,i[m]="string"==typeof e?e:r,o[1]=i;for(var p=2;p{n.r(a),n.d(a,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var t=n(8102),r=(n(3696),n(9916));const l={sidebar_position:1},o="General formatting",i={unversionedId:"eslint-base/formatting",id:"eslint-base/formatting",title:"General formatting",description:"Code formatting is completely Prettier-powered. Some Prettier configuration options that can be contended are explained below. We only use ESLint to enforce some formatting rules that Prettier cannot handle, mostly around curly braces and comments.",source:"@site/../docs/eslint-base/formatting.md",sourceDirName:"eslint-base",slug:"/eslint-base/formatting",permalink:"/js-style-guide/eslint-base/formatting",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"defaultSidebar",previous:{title:"Base rules",permalink:"/js-style-guide/eslint-base/"},next:{title:"Literals",permalink:"/js-style-guide/eslint-base/literals"}},s={},p=[{value:"Dimensions",id:"dimensions",level:2},{value:"Quotes",id:"quotes",level:2},{value:"Other punctuation",id:"other-punctuation",level:2},{value:"Curly braces",id:"curly-braces",level:2},{value:"curly",id:"curly",level:3},{value:"Comments",id:"comments",level:2},{value:"capitalized-comments",id:"capitalized-comments",level:3},{value:"max-len",id:"max-len",level:3},{value:"multiline-comment-style",id:"multiline-comment-style",level:3},{value:"no-inline-comments",id:"no-inline-comments",level:3},{value:"no-warning-comments",id:"no-warning-comments",level:3},{value:"spaced-comment",id:"spaced-comment",level:3},{value:"Whitespace",id:"whitespace",level:2},{value:"no-irregular-whitespace",id:"no-irregular-whitespace",level:3},{value:"no-unexpected-multiline",id:"no-unexpected-multiline",level:3}],y={toc:p},m="wrapper";function d(e){let{components:a,...n}=e;return(0,r.yg)(m,(0,t.A)({},y,n,{components:a,mdxType:"MDXLayout"}),(0,r.yg)("h1",{id:"general-formatting"},"General formatting"),(0,r.yg)("p",null,"Code formatting is completely ",(0,r.yg)("strong",{parentName:"p"},"Prettier-powered"),". Some Prettier configuration options that can be contended are explained below. We only use ESLint to enforce some formatting rules that Prettier cannot handle, mostly around curly braces and comments."),(0,r.yg)("h2",{id:"dimensions"},"Dimensions"),(0,r.yg)("p",null,"The ",(0,r.yg)("inlineCode",{parentName:"p"},"printWidth")," is the default ",(0,r.yg)("inlineCode",{parentName:"p"},"80"),". ",(0,r.yg)("inlineCode",{parentName:"p"},"100")," seems a bit too dense, especially when we are pursuing ",(0,r.yg)("strong",{parentName:"p"},"minimal code area")," that can result in very few blank lines and lone-character lines. 80 characters is also the line length used in the GitHub diff viewer and helps make the diff clean."),(0,r.yg)("p",null,(0,r.yg)("inlineCode",{parentName:"p"},"useTabs")," is turned off. While there have been many valid arguments in favor of tabs (a powerful one is accessibility\u2014some need larger tab spacing while others need smaller ones because their fonts are so big), using variable tab widths inevitably means broken formatting in some cases where the alignment is adjusted based on a fixed tab width. The ",(0,r.yg)("inlineCode",{parentName:"p"},"tabWidth")," is the default ",(0,r.yg)("inlineCode",{parentName:"p"},"2"),". Due to the deeply nested nature of common constructs like JSX and callbacks, 4-space indentation will soon bloat up the file."),(0,r.yg)("h2",{id:"quotes"},"Quotes"),(0,r.yg)("p",null,(0,r.yg)("inlineCode",{parentName:"p"},"singleQuote")," is the default ",(0,r.yg)("inlineCode",{parentName:"p"},"false"),"\u2014we use double quotes. Some reasons are listed below:"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"JSX props are commonly double-quoted, and it's good to keep consistency in other cases."),(0,r.yg)("li",{parentName:"ul"},"Strings in many languages are double-quoted, with single quotes representing characters. Since JC-verse is multi-lingual, keeping a consistent formatting is worthwhile."),(0,r.yg)("li",{parentName:"ul"},"Single quotes (for contractions: ",(0,r.yg)("inlineCode",{parentName:"li"},'"I\'m Josh"'),") within a string is much more common than double quotes, so using double quotes reduces the need to escape or manually convert quotes to avoid parsing failures.")),(0,r.yg)("p",null,(0,r.yg)("inlineCode",{parentName:"p"},"quoteProps")," is the default ",(0,r.yg)("inlineCode",{parentName:"p"},"as-needed"),". We don't want to add extra quotes, because non-quoted props are more beautifully highlighted in editors, and provide more visual contrast compared to the property values."),(0,r.yg)("p",null,(0,r.yg)("inlineCode",{parentName:"p"},"jsxSingleQuote")," is the default ",(0,r.yg)("inlineCode",{parentName:"p"},"false"),". HTML is almost uniformly using double quotes, and we follow that convention in JSX."),(0,r.yg)("h2",{id:"other-punctuation"},"Other punctuation"),(0,r.yg)("p",null,"We mandate semicolons with the default ",(0,r.yg)("inlineCode",{parentName:"p"},"semi: true"),". Some reasons are listed below:"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},'Some people argue that ASI rules are very easy to remember and practice. That is true. However, it adds unnecessary mental burden to actually practice things like "insert leading semis" just to please ASI.'),(0,r.yg)("li",{parentName:"ul"},"Inserting leading semis is incredibly ugly."),(0,r.yg)("li",{parentName:"ul"},"Hitting a semicolon asserts the end of a statement and provides a sense of completion."),(0,r.yg)("li",{parentName:"ul"},"Semis are required in many languages and usually optional in others. We value cross-language consistency.")),(0,r.yg)("p",null,"We require trailing commas in all cases through ",(0,r.yg)("inlineCode",{parentName:"p"},'trailingComma: "all"'),", which is different from the default ",(0,r.yg)("inlineCode",{parentName:"p"},'"es5"'),". We use transpilers to ensure compatibility, but we value the minimal diff and ease to rearrange members that trailing commas provide."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"diff"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"const candidates = [")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#116329"}},'+ "ESLint",')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},' "React",')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},' "Prettier",')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},' "TypeScript",')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#82071E"}},'- "ESLint",')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"];"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"diff"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"const candidates = [")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#7EE787"}},'+ "ESLint",')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},' "React",')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},' "Prettier",')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},' "TypeScript",')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FFA198"}},'- "ESLint",')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"];")))))),(0,r.yg)("p",null,"Object literals are separated by spaces with the default ",(0,r.yg)("inlineCode",{parentName:"p"},"bracketSpacing: true"),". This improves readability, since otherwise, object literals can be easily confused with blocks, and the number of members will make the boundaries hard to notice."),(0,r.yg)("p",null,"JSX opening tags' closing brackets are kept at the end of the last line with ",(0,r.yg)("inlineCode",{parentName:"p"},"bracketSameLine: true"),", which is different from the default. This is because of ",(0,r.yg)("strong",{parentName:"p"},"minimal code area")," and we believe the readability is not detracted, while a lone ",(0,r.yg)("inlineCode",{parentName:"p"},">")," is often weird-looking."),(0,r.yg)("p",null,"Arrow functions' parentheses are always required with the default ",(0,r.yg)("inlineCode",{parentName:"p"},'arrowParens: "always"'),". This means minimal effort to add a parameter, and also to annotate the return type of the function."),(0,r.yg)("h2",{id:"curly-braces"},"Curly braces"),(0,r.yg)("h3",{id:"curly"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/curly"},(0,r.yg)("inlineCode",{parentName:"a"},"curly"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: warning- Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Require omitting braces only when the body is a single-line statement (",(0,r.yg)("inlineCode",{parentName:"li"},'"multi-or-nest"'),")"),(0,r.yg)("li",{parentName:"ul"},"Require ",(0,r.yg)("inlineCode",{parentName:"li"},"if")," and ",(0,r.yg)("inlineCode",{parentName:"li"},"else")," to have consistent curly braces (",(0,r.yg)("inlineCode",{parentName:"li"},'"consistent"'),")")))),(0,r.yg)("p",null,"We want to omit curly braces for single-line statements, because they are more concise."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (foo) "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"bar"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"!"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"a) "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doX"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"()) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"b"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doX"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (b "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"!=="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"Nonexistent"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"`Result: ${"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"b"),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (foo) "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"bar"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"!"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"a) "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doX"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"()) {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"b"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doX"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (b "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"!=="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"Nonexistent"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`Result: ${"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"b"),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("p",null,"However, omitting curly braces when the body is multi-line could quickly make the code lose focus, as is this example:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"!"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"foo)")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," foo "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," bar: "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," qux: "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }; "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Where does the block end? Where does the assignment end?"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"!"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"foo)")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," foo "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," bar: "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," qux: "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }; "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Where does the block end? Where does the assignment end?")))))),(0,r.yg)("h2",{id:"comments"},"Comments"),(0,r.yg)("h3",{id:"capitalized-comments"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/capitalized-comments"},(0,r.yg)("inlineCode",{parentName:"a"},"capitalized-comments"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: warning- Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Always require capitalization (",(0,r.yg)("inlineCode",{parentName:"li"},'"always"'),")"),(0,r.yg)("li",{parentName:"ul"},"Allow multi-line comments (",(0,r.yg)("inlineCode",{parentName:"li"},"ignoreConsecutiveComments: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Do not ignore inline comments (",(0,r.yg)("inlineCode",{parentName:"li"},"ignoreInlineComments: false"),")"),(0,r.yg)("li",{parentName:"ul"},"Ignore common ignore directives (",(0,r.yg)("inlineCode",{parentName:"li"},'ignorePattern: "prettier-ignore|cSpell:ignore"'),")")))),(0,r.yg)("p",null,"Comments should be written in a prose-like format, with proper grammar and capitalization. Even for sentence fragments, capitalize the first word."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// This should be a line of comment explaining why we need to apply the")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// transformation `doX` on `b`.")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doX"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(b); "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Even here\u2014capitalize the first word"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// This should be a line of comment explaining why we need to apply the")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// transformation `doX` on `b`.")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doX"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(b); "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Even here\u2014capitalize the first word")))))),(0,r.yg)("h3",{id:"max-len"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-len"},(0,r.yg)("inlineCode",{parentName:"a"},"max-len"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: warning"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Only consider comments (",(0,r.yg)("inlineCode",{parentName:"li"},"code: Infinity, comments: 80"),")"),(0,r.yg)("li",{parentName:"ul"},"Ignore disable directives, JSDoc, and URLs (",(0,r.yg)("inlineCode",{parentName:"li"},'ignorePattern: "(eslint-disable|@)", ignoreUrls: true'),")")))),(0,r.yg)("p",null,"This makes the comments more consistent with the rest of the code, and also ensures that writing very long comments can still be formatted nicely. Note that this usually requires manual fixing as most formatters don't wrap comments."),(0,r.yg)("p",null,"If a comment line only crosses the 80-character limit by one word, consider rephrasing the comment to make it below 80 characters, or wrap two words to the next line."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Theoretically, we can only wrap 1 word for this line, but we wrap 2")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// for aesthetics."))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Theoretically, we can only wrap 1 word for this line, but we wrap 2")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// for aesthetics.")))))),(0,r.yg)("h3",{id:"multiline-comment-style"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/multiline-comment-style"},(0,r.yg)("inlineCode",{parentName:"a"},"multiline-comment-style"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Require each line to begin with ",(0,r.yg)("inlineCode",{parentName:"li"},"//")," (",(0,r.yg)("inlineCode",{parentName:"li"},'"separate-lines"'),")")))),(0,r.yg)("p",null,"We use single-line comments, because otherwise, if we wrap comments at 80 characters, adding a few words may result in changing the entire comment's style, which is unfavorable. In addition, commenting out a chunk of text only requires ",(0,r.yg)("kbd",null,"\u2318")," + ",(0,r.yg)("kbd",null,"/"),"."),(0,r.yg)("p",null,"An exception to this rule is JSDoc comments."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Some long comment explaining what this line is doing. The longer, the better\u2014")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// we want you to use eloquent language and proper grammar.")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"/**")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}}," * JSDoc which shows up in editors.")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}}," *")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}}," * "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"@param"),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"foo"),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}}," - The foo")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}}," */"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Some long comment explaining what this line is doing. The longer, the better\u2014")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// we want you to use eloquent language and proper grammar.")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"/**")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}}," * JSDoc which shows up in editors.")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}}," *")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}}," * "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"@param"),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"foo"),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}}," - The foo")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}}," */")))))),(0,r.yg)("h3",{id:"no-inline-comments"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-inline-comments"},(0,r.yg)("inlineCode",{parentName:"a"},"no-inline-comments"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"You should avoid using ",(0,r.yg)("inlineCode",{parentName:"p"},"/* ... */")," style comments anywhere. However this rule also reports the following pattern:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// The purpose of a"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// The purpose of a")))))),(0,r.yg)("p",null,"which is actually encouraged. Therefore, you need to execute your own discretion."),(0,r.yg)("h3",{id:"no-warning-comments"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-warning-comments"},(0,r.yg)("inlineCode",{parentName:"a"},"no-warning-comments"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"You are free to commit ",(0,r.yg)("inlineCode",{parentName:"p"},"FIXME")," and ",(0,r.yg)("inlineCode",{parentName:"p"},"TODO")," comments so they get fixed in an indefinite time in the future. If you want a way to track them, use an editor extension like TODO tree."),(0,r.yg)("h3",{id:"spaced-comment"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/spaced-comment"},(0,r.yg)("inlineCode",{parentName:"a"},"spaced-comment"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Require a space after ",(0,r.yg)("inlineCode",{parentName:"li"},"//")," (",(0,r.yg)("inlineCode",{parentName:"li"},'"always"'),")"),(0,r.yg)("li",{parentName:"ul"},"Require spaces padding for ",(0,r.yg)("inlineCode",{parentName:"li"},"/* */")," (",(0,r.yg)("inlineCode",{parentName:"li"},"block.balanced: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Allow no comment-pattern exceptions (",(0,r.yg)("inlineCode",{parentName:"li"},"exceptions: []"),")"),(0,r.yg)("li",{parentName:"ul"},"Allow the following to appear at the beginning of line comments without space: ",(0,r.yg)("inlineCode",{parentName:"li"},'"=", "!", "/"')),(0,r.yg)("li",{parentName:"ul"},"Allow the following to appear at the beginning of block comments without space: ",(0,r.yg)("inlineCode",{parentName:"li"},'"=", "!", ":", "::"'))))),(0,r.yg)("p",null,"You should always have a space after ",(0,r.yg)("inlineCode",{parentName:"p"},"//")," and ",(0,r.yg)("inlineCode",{parentName:"p"},"/*"),". This makes the text easier to read. The exceptions here are to support common patterns, such as ",(0,r.yg)("inlineCode",{parentName:"p"},"///")," for TS triple-slash directives, and ",(0,r.yg)("inlineCode",{parentName:"p"},"/*::")," for Flow type annotations."),(0,r.yg)("h2",{id:"whitespace"},"Whitespace"),(0,r.yg)("h3",{id:"no-irregular-whitespace"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-irregular-whitespace"},(0,r.yg)("inlineCode",{parentName:"a"},"no-irregular-whitespace"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Allow irregular whitespace nowhere (",(0,r.yg)("inlineCode",{parentName:"li"},"skipComments: false, skipJSXText: false, skipRegExps: false, skipStrings: false, skipTemplates: false"),")")))),(0,r.yg)("p",null,"Irregular whitespace is a common source of bugs. It's easy to accidentally copy a non-breaking space from a website, or to accidentally type a non-breaking space. In addition, code might subtly break if someone else tries to na\xefvely retype the code themselves instead of copy-pasting it."),(0,r.yg)("h3",{id:"no-unexpected-multiline"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unexpected-multiline"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unexpected-multiline"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"You may accidentally forget a semicolon and end up with code like:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"hello"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"world"')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"["),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"]."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"forEach"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(addNumber);"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"hello"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"world"')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"["),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"]."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"forEach"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(addNumber);")))))),(0,r.yg)("p",null,"This rule prevents code that does not look idiomatic. Prettier may help by making the code more obvious:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"hello"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"world"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"[("),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},")]."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"forEach"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(addNumber);"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"hello"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"world"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[("),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"3"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},")]."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"forEach"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(addNumber);")))))),(0,r.yg)("p",null,"But we believe more immediate feedback is better."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dea8086e.3b4975b2.js b/assets/js/dea8086e.3b4975b2.js deleted file mode 100644 index a8d1018..0000000 --- a/assets/js/dea8086e.3b4975b2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[63],{9317:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>l,default:()=>c,frontMatter:()=>s,metadata:()=>o,toc:()=>i});var n=t(2685),r=(t(7378),t(5318));const s={sidebar_position:9},l="Async operations",o={unversionedId:"eslint-base/async",id:"eslint-base/async",title:"Async operations",description:"This page discusses best practices for writing promises and async/await and managing async operations.",source:"@site/../docs/eslint-base/async.md",sourceDirName:"eslint-base",slug:"/eslint-base/async",permalink:"/js-style-guide/eslint-base/async",draft:!1,tags:[],version:"current",sidebarPosition:9,frontMatter:{sidebar_position:9},sidebar:"defaultSidebar",previous:{title:"Collections",permalink:"/js-style-guide/eslint-base/collections"},next:{title:"Modules",permalink:"/js-style-guide/eslint-base/modules"}},p={},i=[{value:"Promises",id:"promises",level:2},{value:"no-async-promise-executor",id:"no-async-promise-executor",level:3},{value:"no-promise-executor-return",id:"no-promise-executor-return",level:3},{value:"prefer-promise-reject-errors",id:"prefer-promise-reject-errors",level:3},{value:"Async functions",id:"async-functions",level:2},{value:"require-await",id:"require-await",level:3},{value:"Generator functions",id:"generator-functions",level:2},{value:"require-yield",id:"require-yield",level:3},{value:"Paralleling",id:"paralleling",level:2},{value:"no-await-in-loop",id:"no-await-in-loop",level:3},{value:"Racing",id:"racing",level:2},{value:"require-atomic-updates",id:"require-atomic-updates",level:3}],m={toc:i},d="wrapper";function c(e){let{components:a,...t}=e;return(0,r.kt)(d,(0,n.Z)({},m,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"async-operations"},"Async operations"),(0,r.kt)("p",null,"This page discusses best practices for writing promises and async/await and managing async operations."),(0,r.kt)("h2",{id:"promises"},"Promises"),(0,r.kt)("h3",{id:"no-async-promise-executor"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-async-promise-executor"},(0,r.kt)("inlineCode",{parentName:"a"},"no-async-promise-executor"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error")),(0,r.kt)("p",null,"From the ESLint docs:"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"The executor function can also be an ",(0,r.kt)("inlineCode",{parentName:"p"},"async function"),". However, this is usually a mistake, for a few reasons:"),(0,r.kt)("ul",{parentName:"blockquote"},(0,r.kt)("li",{parentName:"ul"},"If an async executor function throws an error, the error will be lost and won't cause the newly-constructed ",(0,r.kt)("inlineCode",{parentName:"li"},"Promise")," to reject. This could make it difficult to debug and handle some errors."),(0,r.kt)("li",{parentName:"ul"},"If a Promise executor function is using ",(0,r.kt)("inlineCode",{parentName:"li"},"await"),", this is usually a sign that it is not actually necessary to use the ",(0,r.kt)("inlineCode",{parentName:"li"},"new Promise")," constructor, or the scope of the ",(0,r.kt)("inlineCode",{parentName:"li"},"new Promise")," constructor can be reduced."))),(0,r.kt)("h3",{id:"no-promise-executor-return"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-promise-executor-return"},(0,r.kt)("inlineCode",{parentName:"a"},"no-promise-executor-return"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Do not allow returning a ",(0,r.kt)("inlineCode",{parentName:"li"},"void")," expression (",(0,r.kt)("inlineCode",{parentName:"li"},"allowVoid: false"),")")))),(0,r.kt)("p",null,"The executor's return value is ignored and you may be confusing it with the ",(0,r.kt)("inlineCode",{parentName:"p"},"resolve")," function. Do not use concise arrow functions with promise executors, because it usually does not make the code much shorter."),(0,r.kt)("h3",{id:"prefer-promise-reject-errors"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-promise-reject-errors"},(0,r.kt)("inlineCode",{parentName:"a"},"prefer-promise-reject-errors"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: error"),(0,r.kt)("li",{parentName:"ul"},"Configuration:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Do not allow rejecting with nothing (",(0,r.kt)("inlineCode",{parentName:"li"},"allowEmptyReject: false"),")")))),(0,r.kt)("p",null,"Just like you should always ",(0,r.kt)("inlineCode",{parentName:"p"},"throw")," an ",(0,r.kt)("inlineCode",{parentName:"p"},"Error")," instance, you should always ",(0,r.kt)("inlineCode",{parentName:"p"},"reject")," with an ",(0,r.kt)("inlineCode",{parentName:"p"},"Error")," instance. This means when people use ",(0,r.kt)("inlineCode",{parentName:"p"},"try...catch")," with ",(0,r.kt)("inlineCode",{parentName:"p"},"await"),", they can catch the error and handle it properly."),(0,r.kt)("h2",{id:"async-functions"},"Async functions"),(0,r.kt)("h3",{id:"require-await"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/require-await"},(0,r.kt)("inlineCode",{parentName:"a"},"require-await"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning")),(0,r.kt)("p",null,"You should not define an ",(0,r.kt)("inlineCode",{parentName:"p"},"async")," function that does not ",(0,r.kt)("inlineCode",{parentName:"p"},"await")," anything. This means the users have to unnecessarily ",(0,r.kt)("inlineCode",{parentName:"p"},"await")," to get the return value."),(0,r.kt)("p",null,"This is only a warning, because there are many cases where the lack of ",(0,r.kt)("inlineCode",{parentName:"p"},"await")," is intentional:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The function is a stub and will be implemented later."),(0,r.kt)("li",{parentName:"ul"},"It's a callback function and the caller will ",(0,r.kt)("inlineCode",{parentName:"li"},"await")," it. You want to remind readers that ",(0,r.kt)("inlineCode",{parentName:"li"},"await")," is allowed in this function."),(0,r.kt)("li",{parentName:"ul"},"The caller explicitly ",(0,r.kt)("em",{parentName:"li"},"requires")," a ",(0,r.kt)("inlineCode",{parentName:"li"},"Promise")," instance to be returned."),(0,r.kt)("li",{parentName:"ul"},"The function calls another function that is planned to become async in the future."),(0,r.kt)("li",{parentName:"ul"},"The function is a method that derives from an async base method.")),(0,r.kt)("p",null,"You can use your discretion to disable this rule in these cases."),(0,r.kt)("h2",{id:"generator-functions"},"Generator functions"),(0,r.kt)("h3",{id:"require-yield"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/require-yield"},(0,r.kt)("inlineCode",{parentName:"a"},"require-yield"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warn")),(0,r.kt)("p",null,"For the same reasons as ",(0,r.kt)("inlineCode",{parentName:"p"},"require-await"),", this is only set to a warning because there are cases where a generator function is semantically more appropriate."),(0,r.kt)("h2",{id:"paralleling"},"Paralleling"),(0,r.kt)("h3",{id:"no-await-in-loop"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-await-in-loop"},(0,r.kt)("inlineCode",{parentName:"a"},"no-await-in-loop"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: off")),(0,r.kt)("p",null,"While this rule enforces a practice that we are in favor of\u2014prefer paralleling promises instead of firing sequentially, the number of false-positives is overwhelming. Sometimes async operations' order does matter, for example, if we care about the priority of each operation, or when each operation modifies the global state."),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"import"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(alias) module "fs-extra"\nimport fs'},"fs")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"from"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"fs-extra"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"/**")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}}," * When multiple files match, we return the one with priority of JSON > YAML > TOML")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}}," */")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"async"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function findDataFile(): Promise"},"findDataFile")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const fileNames: string[]"},"fileNames")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ["),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"data.json"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"data.yml"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"data.toml"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"];")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"for"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const fileName: string"},"fileName")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"of"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const fileNames: string[]"},"fileNames"),") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(alias) module "fs-extra"\nimport fs'},"fs"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function pathExists(path: string): Promise"},"pathExists")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const fileName: string"},"fileName"),")) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const fileName: string"},"fileName"),";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"import"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(alias) module "fs-extra"\nimport fs'},"fs")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"from"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"fs-extra"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"/**")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}}," * When multiple files match, we return the one with priority of JSON > YAML > TOML")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}}," */")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"async"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function findDataFile(): Promise"},"findDataFile")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const fileNames: string[]"},"fileNames")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ["),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"data.json"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"data.yml"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"data.toml"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"];")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"for"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const fileName: string"},"fileName")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"of"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const fileNames: string[]"},"fileNames"),") {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:'(alias) module "fs-extra"\nimport fs'},"fs"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function pathExists(path: string): Promise"},"pathExists")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const fileName: string"},"fileName"),")) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const fileName: string"},"fileName"),";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("p",null,'The corresponding "nice" way to do this is too obscure and far above being understandable by average-intelligents, and extracting it as a utility function is almost never worthwhile.'),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"executeAsyncSequential")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(type parameter) T in executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"T")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},">("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(type parameter) T in executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"T")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"[], "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) action: (a: T) => Promise"},"action")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: T"},"a")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(type parameter) T in executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"T")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"interface Promise"},"Promise")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"void"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},">) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) Array.reduce>(callbackfn: (previousValue: Promise, currentValue: T, currentIndex: number, array: T[]) => Promise, initialValue: Promise): Promise<...> (+2 overloads)"},"reduce")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) Promise.then(onfulfilled?: ((value: void) => void | PromiseLike) | null | undefined, onrejected?: ((reason: any) => void | PromiseLike) | null | undefined): Promise<...>"},"then")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(() "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) action: (a: T) => Promise"},"action")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem"),")),")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"var Promise: PromiseConstructor"},"Promise")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) PromiseConstructor.resolve(): Promise (+2 overloads)"},"resolve")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(),")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," );")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"findAsyncSequential")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},">("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"[], "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) matcher: (a: T) => Promise"},"matcher")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: T"},"a")),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"interface Promise"},"Promise")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"boolean"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},">) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"var Symbol: SymbolConstructor\n(description?: string | number | undefined) => symbol"},"Symbol")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"not found"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr"))),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) Array.reduce>(callbackfn: (previousValue: Promise, currentValue: T, currentIndex: number, array: T[]) => Promise, initialValue: Promise<...>): Promise<...> (+2 overloads)"},"reduce")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"interface Promise"},"Promise")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),">>("),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"async"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (("),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res"),") "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"!=="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),") "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res"),";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) matcher: (a: T) => Promise"},"matcher")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem"),")) "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem"),";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }, "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"var Promise: PromiseConstructor"},"Promise")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) PromiseConstructor.resolve(value: unique symbol): Promise (+2 overloads)"},"resolve")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),"))")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ."),(0,r.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) Promise.then(onfulfilled?: ((value: T | unique symbol) => T | PromiseLike | undefined) | null | undefined, onrejected?: ((reason: any) => PromiseLike<...>) | null | undefined): Promise<...>"},"then")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(("),(0,r.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: T | unique symbol"},"res")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: T | unique symbol"},"res")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"?"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"var undefined"},"undefined")),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: T"},"res"),"));")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"executeAsyncSequential")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(type parameter) T in executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"T")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},">("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(type parameter) T in executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"T")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[], "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) action: (a: T) => Promise"},"action")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: T"},"a")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(type parameter) T in executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"T")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"interface Promise"},"Promise")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"void"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},">) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) Array.reduce>(callbackfn: (previousValue: Promise, currentValue: T, currentIndex: number, array: T[]) => Promise, initialValue: Promise): Promise<...> (+2 overloads)"},"reduce")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res"),"."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) Promise.then(onfulfilled?: ((value: void) => void | PromiseLike) | null | undefined, onrejected?: ((reason: any) => void | PromiseLike) | null | undefined): Promise<...>"},"then")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(() "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) action: (a: T) => Promise"},"action")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem"),")),")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"var Promise: PromiseConstructor"},"Promise")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) PromiseConstructor.resolve(): Promise (+2 overloads)"},"resolve")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(),")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," );")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"function findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"findAsyncSequential")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},">("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[], "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) matcher: (a: T) => Promise"},"matcher")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) a: T"},"a")),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"interface Promise"},"Promise")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"boolean"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},">) {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"var Symbol: SymbolConstructor\n(description?: string | number | undefined) => symbol"},"Symbol")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"not found"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr"))),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) Array.reduce>(callbackfn: (previousValue: Promise, currentValue: T, currentIndex: number, array: T[]) => Promise, initialValue: Promise<...>): Promise<...> (+2 overloads)"},"reduce")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"interface Promise"},"Promise")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),">>("),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"async"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (("),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res"),") "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"!=="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),") "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res"),";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) matcher: (a: T) => Promise"},"matcher")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem"),")) "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem"),";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),";")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }, "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"var Promise: PromiseConstructor"},"Promise")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) PromiseConstructor.resolve(value: unique symbol): Promise (+2 overloads)"},"resolve")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),"))")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ."),(0,r.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(method) Promise.then(onfulfilled?: ((value: T | unique symbol) => T | PromiseLike | undefined) | null | undefined, onrejected?: ((reason: any) => PromiseLike<...>) | null | undefined): Promise<...>"},"then")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(("),(0,r.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: T | unique symbol"},"res")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: T | unique symbol"},"res")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound")," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"?"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.kt)("data-lsp",{parentName:"span",lsp:"var undefined"},"undefined")),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.kt)("data-lsp",{parentName:"span",lsp:"(parameter) res: T"},"res"),"));")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.kt)("h2",{id:"racing"},"Racing"),(0,r.kt)("h3",{id:"require-atomic-updates"},(0,r.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/require-atomic-updates"},(0,r.kt)("inlineCode",{parentName:"a"},"require-atomic-updates"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Severity: warning")),(0,r.kt)("p",null,"You should generally avoid side effects. When side effects are unavoidable, make sure that only one function is able to update the variable. This rule is helpful, but there can be false-positives, because it can only enforce defensive coding but not locate any actual offenders."))}c.isMDXComponent=!0},5318:(e,a,t)=>{t.d(a,{Zo:()=>m,kt:()=>k});var n=t(7378);function r(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function s(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function l(e){for(var a=1;a=0||(r[t]=e[t]);return r}(e,a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=n.createContext({}),i=function(e){var a=n.useContext(p),t=a;return e&&(t="function"==typeof e?e(a):l(l({},a),e)),t},m=function(e){var a=i(e.components);return n.createElement(p.Provider,{value:a},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},N=n.forwardRef((function(e,a){var t=e.components,r=e.mdxType,s=e.originalType,p=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),d=i(t),N=r,k=d["".concat(p,".").concat(N)]||d[N]||c[N]||s;return t?n.createElement(k,l(l({ref:a},m),{},{components:t})):n.createElement(k,l({ref:a},m))}));function k(e,a){var t=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var s=t.length,l=new Array(s);l[0]=N;var o={};for(var p in a)hasOwnProperty.call(a,p)&&(o[p]=a[p]);o.originalType=e,o[d]="string"==typeof e?e:r,l[1]=o;for(var i=2;i{n.d(a,{xA:()=>y,yg:()=>g});var r=n(3696);function s(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function t(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var a=1;a=0||(s[n]=e[n]);return s}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(s[n]=e[n])}return s}var p=r.createContext({}),i=function(e){var a=r.useContext(p),n=a;return e&&(n="function"==typeof e?e(a):l(l({},a),e)),n},y=function(e){var a=i(e.components);return r.createElement(p.Provider,{value:a},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},c=r.forwardRef((function(e,a){var n=e.components,s=e.mdxType,t=e.originalType,p=e.parentName,y=o(e,["components","mdxType","originalType","parentName"]),m=i(n),c=s,g=m["".concat(p,".").concat(c)]||m[c]||d[c]||t;return n?r.createElement(g,l(l({ref:a},y),{},{components:n})):r.createElement(g,l({ref:a},y))}));function g(e,a){var n=arguments,s=a&&a.mdxType;if("string"==typeof e||s){var t=n.length,l=new Array(t);l[0]=c;var o={};for(var p in a)hasOwnProperty.call(a,p)&&(o[p]=a[p]);o.originalType=e,o[m]="string"==typeof e?e:s,l[1]=o;for(var i=2;i{n.r(a),n.d(a,{assets:()=>p,contentTitle:()=>l,default:()=>d,frontMatter:()=>t,metadata:()=>o,toc:()=>i});var r=n(8102),s=(n(3696),n(9916));const t={sidebar_position:9},l="Async operations",o={unversionedId:"eslint-base/async",id:"eslint-base/async",title:"Async operations",description:"This page discusses best practices for writing promises and async/await and managing async operations.",source:"@site/../docs/eslint-base/async.md",sourceDirName:"eslint-base",slug:"/eslint-base/async",permalink:"/js-style-guide/eslint-base/async",draft:!1,tags:[],version:"current",sidebarPosition:9,frontMatter:{sidebar_position:9},sidebar:"defaultSidebar",previous:{title:"Collections",permalink:"/js-style-guide/eslint-base/collections"},next:{title:"Modules",permalink:"/js-style-guide/eslint-base/modules"}},p={},i=[{value:"Promises",id:"promises",level:2},{value:"no-async-promise-executor",id:"no-async-promise-executor",level:3},{value:"no-promise-executor-return",id:"no-promise-executor-return",level:3},{value:"prefer-promise-reject-errors",id:"prefer-promise-reject-errors",level:3},{value:"Async functions",id:"async-functions",level:2},{value:"require-await",id:"require-await",level:3},{value:"Generator functions",id:"generator-functions",level:2},{value:"require-yield",id:"require-yield",level:3},{value:"Paralleling",id:"paralleling",level:2},{value:"no-await-in-loop",id:"no-await-in-loop",level:3},{value:"Racing",id:"racing",level:2},{value:"require-atomic-updates",id:"require-atomic-updates",level:3}],y={toc:i},m="wrapper";function d(e){let{components:a,...n}=e;return(0,s.yg)(m,(0,r.A)({},y,n,{components:a,mdxType:"MDXLayout"}),(0,s.yg)("h1",{id:"async-operations"},"Async operations"),(0,s.yg)("p",null,"This page discusses best practices for writing promises and async/await and managing async operations."),(0,s.yg)("h2",{id:"promises"},"Promises"),(0,s.yg)("h3",{id:"no-async-promise-executor"},(0,s.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-async-promise-executor"},(0,s.yg)("inlineCode",{parentName:"a"},"no-async-promise-executor"))),(0,s.yg)("ul",null,(0,s.yg)("li",{parentName:"ul"},"Severity: error")),(0,s.yg)("p",null,"From the ESLint docs:"),(0,s.yg)("blockquote",null,(0,s.yg)("p",{parentName:"blockquote"},"The executor function can also be an ",(0,s.yg)("inlineCode",{parentName:"p"},"async function"),". However, this is usually a mistake, for a few reasons:"),(0,s.yg)("ul",{parentName:"blockquote"},(0,s.yg)("li",{parentName:"ul"},"If an async executor function throws an error, the error will be lost and won't cause the newly-constructed ",(0,s.yg)("inlineCode",{parentName:"li"},"Promise")," to reject. This could make it difficult to debug and handle some errors."),(0,s.yg)("li",{parentName:"ul"},"If a Promise executor function is using ",(0,s.yg)("inlineCode",{parentName:"li"},"await"),", this is usually a sign that it is not actually necessary to use the ",(0,s.yg)("inlineCode",{parentName:"li"},"new Promise")," constructor, or the scope of the ",(0,s.yg)("inlineCode",{parentName:"li"},"new Promise")," constructor can be reduced."))),(0,s.yg)("h3",{id:"no-promise-executor-return"},(0,s.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-promise-executor-return"},(0,s.yg)("inlineCode",{parentName:"a"},"no-promise-executor-return"))),(0,s.yg)("ul",null,(0,s.yg)("li",{parentName:"ul"},"Severity: error"),(0,s.yg)("li",{parentName:"ul"},"Configuration:",(0,s.yg)("ul",{parentName:"li"},(0,s.yg)("li",{parentName:"ul"},"Do not allow returning a ",(0,s.yg)("inlineCode",{parentName:"li"},"void")," expression (",(0,s.yg)("inlineCode",{parentName:"li"},"allowVoid: false"),")")))),(0,s.yg)("p",null,"The executor's return value is ignored and you may be confusing it with the ",(0,s.yg)("inlineCode",{parentName:"p"},"resolve")," function. Do not use concise arrow functions with promise executors, because it usually does not make the code much shorter."),(0,s.yg)("h3",{id:"prefer-promise-reject-errors"},(0,s.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-promise-reject-errors"},(0,s.yg)("inlineCode",{parentName:"a"},"prefer-promise-reject-errors"))),(0,s.yg)("ul",null,(0,s.yg)("li",{parentName:"ul"},"Severity: error"),(0,s.yg)("li",{parentName:"ul"},"Configuration:",(0,s.yg)("ul",{parentName:"li"},(0,s.yg)("li",{parentName:"ul"},"Do not allow rejecting with nothing (",(0,s.yg)("inlineCode",{parentName:"li"},"allowEmptyReject: false"),")")))),(0,s.yg)("p",null,"Just like you should always ",(0,s.yg)("inlineCode",{parentName:"p"},"throw")," an ",(0,s.yg)("inlineCode",{parentName:"p"},"Error")," instance, you should always ",(0,s.yg)("inlineCode",{parentName:"p"},"reject")," with an ",(0,s.yg)("inlineCode",{parentName:"p"},"Error")," instance. This means when people use ",(0,s.yg)("inlineCode",{parentName:"p"},"try...catch")," with ",(0,s.yg)("inlineCode",{parentName:"p"},"await"),", they can catch the error and handle it properly."),(0,s.yg)("h2",{id:"async-functions"},"Async functions"),(0,s.yg)("h3",{id:"require-await"},(0,s.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/require-await"},(0,s.yg)("inlineCode",{parentName:"a"},"require-await"))),(0,s.yg)("ul",null,(0,s.yg)("li",{parentName:"ul"},"Severity: warning")),(0,s.yg)("p",null,"You should not define an ",(0,s.yg)("inlineCode",{parentName:"p"},"async")," function that does not ",(0,s.yg)("inlineCode",{parentName:"p"},"await")," anything. This means the users have to unnecessarily ",(0,s.yg)("inlineCode",{parentName:"p"},"await")," to get the return value."),(0,s.yg)("p",null,"This is only a warning, because there are many cases where the lack of ",(0,s.yg)("inlineCode",{parentName:"p"},"await")," is intentional:"),(0,s.yg)("ul",null,(0,s.yg)("li",{parentName:"ul"},"The function is a stub and will be implemented later."),(0,s.yg)("li",{parentName:"ul"},"It's a callback function and the caller will ",(0,s.yg)("inlineCode",{parentName:"li"},"await")," it. You want to remind readers that ",(0,s.yg)("inlineCode",{parentName:"li"},"await")," is allowed in this function."),(0,s.yg)("li",{parentName:"ul"},"The caller explicitly ",(0,s.yg)("em",{parentName:"li"},"requires")," a ",(0,s.yg)("inlineCode",{parentName:"li"},"Promise")," instance to be returned."),(0,s.yg)("li",{parentName:"ul"},"The function calls another function that is planned to become async in the future."),(0,s.yg)("li",{parentName:"ul"},"The function is a method that derives from an async base method.")),(0,s.yg)("p",null,"You can use your discretion to disable this rule in these cases."),(0,s.yg)("h2",{id:"generator-functions"},"Generator functions"),(0,s.yg)("h3",{id:"require-yield"},(0,s.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/require-yield"},(0,s.yg)("inlineCode",{parentName:"a"},"require-yield"))),(0,s.yg)("ul",null,(0,s.yg)("li",{parentName:"ul"},"Severity: warn")),(0,s.yg)("p",null,"For the same reasons as ",(0,s.yg)("inlineCode",{parentName:"p"},"require-await"),", this is only set to a warning because there are cases where a generator function is semantically more appropriate."),(0,s.yg)("h2",{id:"paralleling"},"Paralleling"),(0,s.yg)("h3",{id:"no-await-in-loop"},(0,s.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-await-in-loop"},(0,s.yg)("inlineCode",{parentName:"a"},"no-await-in-loop"))),(0,s.yg)("ul",null,(0,s.yg)("li",{parentName:"ul"},"Severity: off")),(0,s.yg)("p",null,"While this rule enforces a practice that we are in favor of\u2014prefer paralleling promises instead of firing sequentially, the number of false-positives is overwhelming. Sometimes async operations' order does matter, for example, if we care about the priority of each operation, or when each operation modifies the global state."),(0,s.yg)("div",{className:"shiki-twoslash-fragment"},(0,s.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,s.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,s.yg)("div",{parentName:"pre",className:"code-container"},(0,s.yg)("code",{parentName:"div"},(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"import"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:'(alias) module "fs-extra"\nimport fs'},"fs")," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"from"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"fs-extra"'),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,s.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"/**")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#6E7781"}}," * When multiple files match, we return the one with priority of JSON > YAML > TOML")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#6E7781"}}," */")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"async"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"function findDataFile(): Promise"},"findDataFile")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"const fileNames: string[]"},"fileNames")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ["),(0,s.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"data.json"'),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,s.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"data.yml"'),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,s.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"data.toml"'),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"];")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"for"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"const fileName: string"},"fileName")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"of"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const fileNames: string[]"},"fileNames"),") {")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:'(alias) module "fs-extra"\nimport fs'},"fs"),"."),(0,s.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"function pathExists(path: string): Promise"},"pathExists")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const fileName: string"},"fileName"),")) {")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const fileName: string"},"fileName"),";")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"null"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,s.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,s.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,s.yg)("div",{parentName:"pre",className:"code-container"},(0,s.yg)("code",{parentName:"div"},(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"import"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:'(alias) module "fs-extra"\nimport fs'},"fs")," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"from"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"fs-extra"'),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,s.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"/**")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#8B949E"}}," * When multiple files match, we return the one with priority of JSON > YAML > TOML")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#8B949E"}}," */")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"async"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"function findDataFile(): Promise"},"findDataFile")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"const fileNames: string[]"},"fileNames")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ["),(0,s.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"data.json"'),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,s.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"data.yml"'),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,s.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"data.toml"'),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"];")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"for"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"const fileName: string"},"fileName")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"of"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const fileNames: string[]"},"fileNames"),") {")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:'(alias) module "fs-extra"\nimport fs'},"fs"),"."),(0,s.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"function pathExists(path: string): Promise"},"pathExists")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const fileName: string"},"fileName"),")) {")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const fileName: string"},"fileName"),";")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"null"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,s.yg)("p",null,'The corresponding "nice" way to do this is too obscure and far above being understandable by average-intelligents, and extracting it as a utility function is almost never worthwhile.'),(0,s.yg)("div",{className:"shiki-twoslash-fragment"},(0,s.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,s.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,s.yg)("div",{parentName:"pre",className:"code-container"},(0,s.yg)("code",{parentName:"div"},(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"function executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"executeAsyncSequential")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(type parameter) T in executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"T")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},">("),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr")),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(type parameter) T in executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"T")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"[], "),(0,s.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) action: (a: T) => Promise"},"action")),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: T"},"a")),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(type parameter) T in executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"T")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"interface Promise"},"Promise")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,s.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"void"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},">) {")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr"),"."),(0,s.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(method) Array.reduce>(callbackfn: (previousValue: Promise, currentValue: T, currentIndex: number, array: T[]) => Promise, initialValue: Promise): Promise<...> (+2 overloads)"},"reduce")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res"),"."),(0,s.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(method) Promise.then(onfulfilled?: ((value: void) => void | PromiseLike) | null | undefined, onrejected?: ((reason: any) => void | PromiseLike) | null | undefined): Promise<...>"},"then")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(() "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) action: (a: T) => Promise"},"action")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem"),")),")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"var Promise: PromiseConstructor"},"Promise")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,s.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(method) PromiseConstructor.resolve(): Promise (+2 overloads)"},"resolve")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(),")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," );")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,s.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"function findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"findAsyncSequential")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},">("),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr")),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"[], "),(0,s.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) matcher: (a: T) => Promise"},"matcher")),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: T"},"a")),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"interface Promise"},"Promise")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,s.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"boolean"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},">) {")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"var Symbol: SymbolConstructor\n(description?: string | number | undefined) => symbol"},"Symbol")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,s.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"not found"'),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr"))),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ."),(0,s.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(method) Array.reduce>(callbackfn: (previousValue: Promise, currentValue: T, currentIndex: number, array: T[]) => Promise, initialValue: Promise<...>): Promise<...> (+2 overloads)"},"reduce")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"interface Promise"},"Promise")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"<"),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),">>("),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"async"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (("),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res"),") "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"!=="),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),") "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res"),";")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) matcher: (a: T) => Promise"},"matcher")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem"),")) "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem"),";")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),";")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }, "),(0,s.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"var Promise: PromiseConstructor"},"Promise")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,s.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(method) PromiseConstructor.resolve(value: unique symbol): Promise (+2 overloads)"},"resolve")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),"))")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ."),(0,s.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(method) Promise.then(onfulfilled?: ((value: T | unique symbol) => T | PromiseLike | undefined) | null | undefined, onrejected?: ((reason: any) => PromiseLike<...>) | null | undefined): Promise<...>"},"then")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(("),(0,s.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: T | unique symbol"},"res")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: T | unique symbol"},"res")," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound")," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"?"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"var undefined"},"undefined")),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: T"},"res"),"));")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,s.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,s.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,s.yg)("div",{parentName:"pre",className:"code-container"},(0,s.yg)("code",{parentName:"div"},(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"function executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"executeAsyncSequential")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(type parameter) T in executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"T")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},">("),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr")),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(type parameter) T in executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"T")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[], "),(0,s.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) action: (a: T) => Promise"},"action")),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: T"},"a")),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(type parameter) T in executeAsyncSequential(arr: T[], action: (a: T) => Promise): Promise"},"T")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"interface Promise"},"Promise")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,s.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"void"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},">) {")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr"),"."),(0,s.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(method) Array.reduce>(callbackfn: (previousValue: Promise, currentValue: T, currentIndex: number, array: T[]) => Promise, initialValue: Promise): Promise<...> (+2 overloads)"},"reduce")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res"),"."),(0,s.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(method) Promise.then(onfulfilled?: ((value: void) => void | PromiseLike) | null | undefined, onrejected?: ((reason: any) => void | PromiseLike) | null | undefined): Promise<...>"},"then")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(() "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) action: (a: T) => Promise"},"action")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem"),")),")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"var Promise: PromiseConstructor"},"Promise")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,s.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(method) PromiseConstructor.resolve(): Promise (+2 overloads)"},"resolve")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(),")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," );")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,s.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"function findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"findAsyncSequential")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},">("),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr")),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[], "),(0,s.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) matcher: (a: T) => Promise"},"matcher")),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) a: T"},"a")),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"interface Promise"},"Promise")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,s.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"boolean"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},">) {")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"var Symbol: SymbolConstructor\n(description?: string | number | undefined) => symbol"},"Symbol")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,s.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"not found"'),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) arr: T[]"},"arr"))),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ."),(0,s.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(method) Array.reduce>(callbackfn: (previousValue: Promise, currentValue: T, currentIndex: number, array: T[]) => Promise, initialValue: Promise<...>): Promise<...> (+2 overloads)"},"reduce")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"interface Promise"},"Promise")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"<"),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(type parameter) T in findAsyncSequential(arr: T[], matcher: (a: T) => Promise): Promise"},"T")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),">>("),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"async"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (("),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res"),") "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"!=="),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),") "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: Promise"},"res"),";")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) matcher: (a: T) => Promise"},"matcher")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem"),")) "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) elem: T"},"elem"),";")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),";")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }, "),(0,s.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"var Promise: PromiseConstructor"},"Promise")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,s.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(method) PromiseConstructor.resolve(value: unique symbol): Promise (+2 overloads)"},"resolve")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound"),"))")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ."),(0,s.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(method) Promise.then(onfulfilled?: ((value: T | unique symbol) => T | PromiseLike | undefined) | null | undefined, onrejected?: ((reason: any) => PromiseLike<...>) | null | undefined): Promise<...>"},"then")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(("),(0,s.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: T | unique symbol"},"res")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: T | unique symbol"},"res")," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"const notFound: unique symbol"},"notFound")," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"?"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,s.yg)("data-lsp",{parentName:"span",lsp:"var undefined"},"undefined")),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,s.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,s.yg)("data-lsp",{parentName:"span",lsp:"(parameter) res: T"},"res"),"));")),(0,s.yg)("div",{parentName:"code",className:"line"},(0,s.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,s.yg)("h2",{id:"racing"},"Racing"),(0,s.yg)("h3",{id:"require-atomic-updates"},(0,s.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/require-atomic-updates"},(0,s.yg)("inlineCode",{parentName:"a"},"require-atomic-updates"))),(0,s.yg)("ul",null,(0,s.yg)("li",{parentName:"ul"},"Severity: warning")),(0,s.yg)("p",null,"You should generally avoid side effects. When side effects are unavoidable, make sure that only one function is able to update the variable. This rule is helpful, but there can be false-positives, because it can only enforce defensive coding but not locate any actual offenders."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e82d795c.845b5ab5.js b/assets/js/e82d795c.845b5ab5.js deleted file mode 100644 index a38dd10..0000000 --- a/assets/js/e82d795c.845b5ab5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[925],{9825:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>r,default:()=>m,frontMatter:()=>s,metadata:()=>o,toc:()=>i});var n=t(2685),l=(t(7378),t(5318));const s={sidebar_position:6},r="Functions",o={unversionedId:"eslint-base/functions",id:"eslint-base/functions",title:"Functions",description:"This page concerns styles for authoring functions, including the syntax for function declarations, arrow functions, and methods.",source:"@site/../docs/eslint-base/functions.md",sourceDirName:"eslint-base",slug:"/eslint-base/functions",permalink:"/js-style-guide/eslint-base/functions",draft:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"defaultSidebar",previous:{title:"Control flow",permalink:"/js-style-guide/eslint-base/control-flow"},next:{title:"Objects & classes",permalink:"/js-style-guide/eslint-base/objects-classes"}},p={},i=[{value:"When to create functions",id:"when-to-create-functions",level:2},{value:"Declaration",id:"declaration",level:2},{value:"func-style",id:"func-style",level:3},{value:"no-func-assign",id:"no-func-assign",level:3},{value:"no-inner-declarations",id:"no-inner-declarations",level:3},{value:"no-loop-func",id:"no-loop-func",level:3},{value:"prefer-arrow-callback",id:"prefer-arrow-callback",level:3},{value:"Names",id:"names",level:2},{value:"func-names",id:"func-names",level:3},{value:"func-name-matching",id:"func-name-matching",level:3},{value:"Bodies",id:"bodies",level:2},{value:"max-lines-per-function",id:"max-lines-per-function",level:3},{value:"max-nested-callbacks",id:"max-nested-callbacks",level:3},{value:"no-empty-function",id:"no-empty-function",level:3},{value:"Parameters & arguments",id:"parameters--arguments",level:2},{value:"default-param-last",id:"default-param-last",level:3},{value:"max-params",id:"max-params",level:3},{value:"no-caller",id:"no-caller",level:3},{value:"no-dupe-args",id:"no-dupe-args",level:3},{value:"no-param-reassign",id:"no-param-reassign",level:3},{value:"prefer-rest-params",id:"prefer-rest-params",level:3},{value:"prefer-spread",id:"prefer-spread",level:3},{value:"Return statements",id:"return-statements",level:2},{value:"consistent-return",id:"consistent-return",level:3},{value:"no-useless-return",id:"no-useless-return",level:3},{value:"Arrow functions",id:"arrow-functions",level:2},{value:"arrow-body-style",id:"arrow-body-style",level:3},{value:"this",id:"this",level:2},{value:"consistent-this",id:"consistent-this",level:3},{value:"no-extra-bind",id:"no-extra-bind",level:3},{value:"no-invalid-this",id:"no-invalid-this",level:3},{value:"no-useless-call",id:"no-useless-call",level:3}],c={toc:i},d="wrapper";function m(e){let{components:a,...t}=e;return(0,l.kt)(d,(0,n.Z)({},c,t,{components:a,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"functions"},"Functions"),(0,l.kt)("p",null,"This page concerns styles for authoring functions, including the syntax for function declarations, arrow functions, and methods."),(0,l.kt)("h2",{id:"when-to-create-functions"},"When to create functions"),(0,l.kt)("p",null,"The guide is: ",(0,l.kt)("strong",{parentName:"p"},"do not over-abstract"),". For example, this kind of code produces unnecessary runtime overhead, and more importantly, mental burden:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"resolveTarget"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ What does `resolveTarget` do?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," filePath."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"endsWith"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'".js"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},")")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"?"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"`./build/js/${"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"}`")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"`./build/asset/${"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ It seems to return a different path when the extension is different, but")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// where is it useful?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"async"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"copyFile"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ `copyFile` sounds like a really generic name. Is it used in multiple places?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Should I take caution when refactoring?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"targetPath"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"resolveTarget"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(filePath);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ What does `resolveTarget` do again? *Going back to definition* Now I know")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// what it does, but the code is so long (not in this dumbed-down example),")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// I can't compare them side-by-side and understand exactly what the code")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// does step-by-step at a glance")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," fs."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"copyFile"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(filePath, targetPath);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"`Copied ${"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Promise"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"all"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(files."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"map"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(copyFile));")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ Does `copyFile` only do `fs.copyFile`? *Going back to definition* No, it")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// does much more. Of course I can name it as `copyFileToResolvedTargetAndLog`,")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// but then what's the point of abstraction?"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"resolveTarget"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ What does `resolveTarget` do?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," filePath."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"endsWith"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'".js"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},")")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"?"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`./build/js/${"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`./build/asset/${"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ It seems to return a different path when the extension is different, but")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// where is it useful?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"async"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"copyFile"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ `copyFile` sounds like a really generic name. Is it used in multiple places?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Should I take caution when refactoring?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"targetPath"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"resolveTarget"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(filePath);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ What does `resolveTarget` do again? *Going back to definition* Now I know")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// what it does, but the code is so long (not in this dumbed-down example),")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// I can't compare them side-by-side and understand exactly what the code")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// does step-by-step at a glance")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," fs."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"copyFile"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(filePath, targetPath);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`Copied ${"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Promise"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"all"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(files."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"map"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(copyFile));")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ Does `copyFile` only do `fs.copyFile`? *Going back to definition* No, it")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// does much more. Of course I can name it as `copyFileToResolvedTargetAndLog`,")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// but then what's the point of abstraction?")))))),(0,l.kt)("p",null,"When you could just simply put everything into a single lambda and it still makes sense:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Promise"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"all"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(files."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"map"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"async"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"targetPath"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," filePath."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"endsWith"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"'.js'"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},")")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"?"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"`./build/js/${"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"}`")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"`./build/asset/${"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," fs."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"copyFile"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(filePath, targetPath);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"`Copied ${"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"})));"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Promise"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"all"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(files."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"map"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"async"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"targetPath"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," filePath."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"endsWith"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"'.js'"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},")")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"?"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`./build/js/${"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`./build/asset/${"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," fs."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"copyFile"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(filePath, targetPath);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`Copied ${"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"})));")))))),(0,l.kt)("p",null,"Keep in mind the rule of \"code for the average-intelligent\". When a sequence of operations is self-explanatory, you don't need to extract it into a separate function just to give it a name that mirrors exactly what's described with code."),(0,l.kt)("p",null,"In addition, ",(0,l.kt)("strong",{parentName:"p"},"do not export a function just to test it"),"."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:"copyFile.ts"},(0,l.kt)("div",{parentName:"pre",className:"code-title"},"copyFile.ts"),(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Is it used in multiple modules? Should I take caution when refactoring?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// *Doing a global search* It's only used in this module and its accompanied")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// test file. But if I remove the `export`, I have to refactor the tests and")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// risk reduced test coverage. Yuck!")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"export"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"resolveTarget"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," filePath."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"endsWith"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'".js"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},")")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"?"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"`./build/js/${"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"}`")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"`./build/asset/${"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:"copyFile.ts"},(0,l.kt)("div",{parentName:"pre",className:"code-title"},"copyFile.ts"),(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Is it used in multiple modules? Should I take caution when refactoring?")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// *Doing a global search* It's only used in this module and its accompanied")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// test file. But if I remove the `export`, I have to refactor the tests and")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// risk reduced test coverage. Yuck!")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"export"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"resolveTarget"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," filePath."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"endsWith"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'".js"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},")")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"?"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`./build/js/${"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`./build/asset/${"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:"copyFile.test.ts"},(0,l.kt)("div",{parentName:"pre",className:"code-title"},"copyFile.test.ts"),(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"import"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," { resolveTarget } "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"from"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"./copyFile"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Testing this function simply because tests are easy to write")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"describe"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"resolveTarget"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", () "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"it"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"works"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", () "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"expect"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"resolveTarget"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"foo.js"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"))."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"toEqual"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"./build/js/foo.js"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," });")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"});"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:"copyFile.test.ts"},(0,l.kt)("div",{parentName:"pre",className:"code-title"},"copyFile.test.ts"),(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"import"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { resolveTarget } "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"from"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"./copyFile"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"}),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Testing this function simply because tests are easy to write")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"describe"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"resolveTarget"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", () "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"it"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"works"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", () "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"expect"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"resolveTarget"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"foo.js"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"))."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"toEqual"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"./build/js/foo.js"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," });")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"});")))))),(0,l.kt)("p",null,"Tests are made for public APIs (or at least the useful functions that other internal modules use), not for internal implementations. Implementations may be refactored at any time and intermediate functions come and go, so don't tie your tests to them. Mock side-effects like ",(0,l.kt)("inlineCode",{parentName:"p"},"fs.readFile")," or provide fixtures instead of staying in the comfort zone of testing pure functions."),(0,l.kt)("p",null,"Keep in mind that refactoring doesn't only mean changing the implementations of existing functions or modules, but also removing and adding them. It is critical to make clear which downstream dependents will be affected."),(0,l.kt)("h2",{id:"declaration"},"Declaration"),(0,l.kt)("h3",{id:"func-style"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/func-style"},(0,l.kt)("inlineCode",{parentName:"a"},"func-style"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: warning"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Use function declaration over function expression (",(0,l.kt)("inlineCode",{parentName:"li"},'"declaration"'),")"),(0,l.kt)("li",{parentName:"ul"},"Allow arrow functions when using expressions (",(0,l.kt)("inlineCode",{parentName:"li"},"allowArrowFunctions: true"),")")))),(0,l.kt)("p",null,"We allow two kinds of functions: function declarations and arrow functions. There are some additional restrictions:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"At the top level, do not use ",(0,l.kt)("inlineCode",{parentName:"li"},"const func = () => ..."),". Always use ",(0,l.kt)("inlineCode",{parentName:"li"},"function func() { ... }"),", unless you need to type the function as a whole. This makes the code visually more balanced. This restriction is relaxed in nested functions (especially event listeners in React components)."),(0,l.kt)("li",{parentName:"ul"},"We allow function expressions in the rare case of declaring extra methods, such as ",(0,l.kt)("inlineCode",{parentName:"li"},"Foo.prototype.bar = function () { ... }"),'. This should be exceedingly rare but they are allowed by the rule nonetheless. However, if the "method" doesn\'t rely on ',(0,l.kt)("inlineCode",{parentName:"li"},"this"),", prefer using arrow functions."),(0,l.kt)("li",{parentName:"ul"},"To declare function properties in an object literal, use the method syntax ",(0,l.kt)("inlineCode",{parentName:"li"},"{ foo() { ... } }")," instead of arrow functions ",(0,l.kt)("inlineCode",{parentName:"li"},"{ foo: () => ... }")," to make it appear shorter. Exceptions are allowed if using arrow functions allows using concise body which saves lines. This is enforced by ",(0,l.kt)("a",{parentName:"li",href:"/js-style-guide/eslint-base/objects-classes#object-shorthand"},(0,l.kt)("inlineCode",{parentName:"a"},"object-shorthand")),".")),(0,l.kt)("h3",{id:"no-func-assign"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-func-assign"},(0,l.kt)("inlineCode",{parentName:"a"},"no-func-assign"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ts(2630): Cannot assign to 'a' because it is a function."))))),(0,l.kt)("p",null,"The reason is the same as ",(0,l.kt)("a",{parentName:"p",href:"/js-style-guide/eslint-base/objects-classes#no-class-assign"},(0,l.kt)("inlineCode",{parentName:"a"},"no-class-assign")),". If you want to wrap your function, create a new variable instead."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"Component"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {}")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"ComponentMemo"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," React."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"memo"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(Component);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Or directly:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"export"),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"default"),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"React"),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"memo"),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"Component"),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},")"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"Component"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {}")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"ComponentMemo"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," React."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"memo"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(Component);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Or directly:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"export"),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"default"),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"React"),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"memo"),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"Component"),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},")"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")))))),(0,l.kt)("h3",{id:"no-inner-declarations"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-inner-declarations"},(0,l.kt)("inlineCode",{parentName:"a"},"no-inner-declarations"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"Block-scoped vars are already reported by ",(0,l.kt)("a",{parentName:"p",href:"/js-style-guide/eslint-base/variables-names#block-scoped-var"},(0,l.kt)("inlineCode",{parentName:"a"},"block-scoped-var")),". Function declarations inside blocks behave as expected in strict mode, so there's no good reason to forbid them."),(0,l.kt)("h3",{id:"no-loop-func"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-loop-func"},(0,l.kt)("inlineCode",{parentName:"a"},"no-loop-func"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"While this rule could prevent bugs in theory, we think in the vast majority of cases, a closure is actually intended to read the latest value instead of the value at the time the function was created. In addition, many functions are synchronously called (such as array methods) and the rule just false-positives. If stale references actually cause bugs, you should catch them through tests."),(0,l.kt)("h3",{id:"prefer-arrow-callback"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-arrow-callback"},(0,l.kt)("inlineCode",{parentName:"a"},"prefer-arrow-callback"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Do not allow named function expressions (",(0,l.kt)("inlineCode",{parentName:"li"},"allowNamedFunctions: true"),")"),(0,l.kt)("li",{parentName:"ul"},"Use arrow functions even when the function expression references ",(0,l.kt)("inlineCode",{parentName:"li"},"this")," (",(0,l.kt)("inlineCode",{parentName:"li"},"allowUnboundThis: true"),")")))),(0,l.kt)("p",null,"Always use arrow callbacks. If the callback relies on the ",(0,l.kt)("inlineCode",{parentName:"p"},"this")," value or needs to be named, use a function declaration instead. Use of function expressions may be a sign of legacy code or unfamiliarity with the language."),(0,l.kt)("h2",{id:"names"},"Names"),(0,l.kt)("h3",{id:"func-names"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/func-names"},(0,l.kt)("inlineCode",{parentName:"a"},"func-names"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: warning"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Require function expressions to be named if one can't be inferred (",(0,l.kt)("inlineCode",{parentName:"li"},'"as-needed"'),")")))),(0,l.kt)("p",null,"In the same vein as ",(0,l.kt)("inlineCode",{parentName:"p"},"func-name-matching"),", this rule is to ensure the readability of the stack trace and the reliability of the ",(0,l.kt)("inlineCode",{parentName:"p"},"func.name")," property."),(0,l.kt)("h3",{id:"func-name-matching"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/func-name-matching"},(0,l.kt)("inlineCode",{parentName:"a"},"func-name-matching"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: warning"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Always require the function expression's name to match the variable it's assigned to. (",(0,l.kt)("inlineCode",{parentName:"li"},'"always"'),")")))),(0,l.kt)("p",null,"Although we rarely use function expressions and always prefer either arrow functions or declarations, in cases where function expressions are necessary, the variable name should match the name of declaration. It's mostly to ensure that the error stack is always as expected: the variable name does not appear in the stack trace and may result in obscure call stacks."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"longFoo"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"pass"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"};")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"foo2"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"longFoo"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"throw"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Error"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"panic"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"};")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"bar"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"foo2"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"bar"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// This throws error stack:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Error: panic")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// at longFoo (...)")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// at bar (...)"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"longFoo"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"pass"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo2"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"longFoo"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"throw"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Error"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"panic"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"bar"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo2"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"bar"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// This throws error stack:")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Error: panic")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// at longFoo (...)")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// at bar (...)")))))),(0,l.kt)("p",null,"The ",(0,l.kt)("inlineCode",{parentName:"p"},"longFoo")," is ambiguous. Although there's also a source position in the stack trace, it's better if we can instantly recognize the offending code when handling bug reports containing stack traces."),(0,l.kt)("h2",{id:"bodies"},"Bodies"),(0,l.kt)("h3",{id:"max-lines-per-function"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-lines-per-function"},(0,l.kt)("inlineCode",{parentName:"a"},"max-lines-per-function"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"See our opinion on ",(0,l.kt)("a",{parentName:"p",href:"/js-style-guide/eslint-base/control-flow#complexity"},"complexity"),"."),(0,l.kt)("h3",{id:"max-nested-callbacks"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-nested-callbacks"},(0,l.kt)("inlineCode",{parentName:"a"},"max-nested-callbacks"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"See our opinion on ",(0,l.kt)("a",{parentName:"p",href:"/js-style-guide/eslint-base/control-flow#complexity"},"complexity"),"."),(0,l.kt)("h3",{id:"no-empty-function"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-empty-function"},(0,l.kt)("inlineCode",{parentName:"a"},"no-empty-function"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off"),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"@typescript-eslint/no-empty-function"))))),(0,l.kt)("p",null,"We allow empty functions, because they are frequently needed for no-op callbacks."),(0,l.kt)("h2",{id:"parameters--arguments"},"Parameters & arguments"),(0,l.kt)("h3",{id:"default-param-last"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/default-param-last"},(0,l.kt)("inlineCode",{parentName:"a"},"default-param-last"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off"),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/js-style-guide/typescript/base#default-param-last"},(0,l.kt)("inlineCode",{parentName:"a"},"@typescript-eslint/default-param-last"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ts(1016): A required parameter cannot follow an optional parameter."))))),(0,l.kt)("p",null,'The base rule has too many false positives because in many cases, the parameters following the "default" are optional too, just without defaults. Even in JavaScript, we would use TS declarations to make sure we author sane APIs.'),(0,l.kt)("h3",{id:"max-params"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-params"},(0,l.kt)("inlineCode",{parentName:"a"},"max-params"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"See our opinion on ",(0,l.kt)("a",{parentName:"p",href:"/js-style-guide/eslint-base/control-flow#complexity"},"complexity"),". However, you should actively consider if you actually need many parameters. In the case when the number of parameters gets large, consider using an object instead."),(0,l.kt)("h3",{id:"no-caller"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-caller"},(0,l.kt)("inlineCode",{parentName:"a"},"no-caller"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"From the ESLint docs:"),(0,l.kt)("blockquote",null,(0,l.kt)("p",{parentName:"blockquote"},"The use of ",(0,l.kt)("inlineCode",{parentName:"p"},"arguments.caller")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"arguments.callee")," make several code optimizations impossible. They have been deprecated in future versions of JavaScript and their use is forbidden in ECMAScript 5 while in strict mode.")),(0,l.kt)("h3",{id:"no-dupe-args"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-dupe-args"},(0,l.kt)("inlineCode",{parentName:"a"},"no-dupe-args"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"SyntaxError: Duplicate parameter name not allowed in this context"))))),(0,l.kt)("p",null,"Duplicate parameter names are a syntax error in strict mode."),(0,l.kt)("h3",{id:"no-param-reassign"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-param-reassign"},(0,l.kt)("inlineCode",{parentName:"a"},"no-param-reassign"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off")),(0,l.kt)("p",null,"We think it's fine to reassign parameters, particularly for normalization purposes, if you are interfacing with external code."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"add"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"a"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"b"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," a "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Number"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(a); "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Make sure `a` and `b` are actually numbers")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," b "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Number"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(b);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," a "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"+"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," b;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"add"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"a"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"b"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Number"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(a); "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Make sure `a` and `b` are actually numbers")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," b "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Number"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(b);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"+"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," b;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("p",null,"Do not reassign parameters if it drastically changes the semantics of the parameter. In TypeScript, you cannot change the type of the parameter, and you should strive to do the same in JavaScript."),(0,l.kt)("h3",{id:"prefer-rest-params"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-rest-params"},(0,l.kt)("inlineCode",{parentName:"a"},"prefer-rest-params"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Use rest parameters instead of ",(0,l.kt)("inlineCode",{parentName:"p"},"arguments"),". Rest parameters are more versatile because they are real arrays, and can be used in arrow functions."),(0,l.kt)("p",null,"The only known exception is you want to use the arguments both named and as an array:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"p"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Proxy"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {},")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"get"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"target"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"prop"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"receiver"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(target "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," receiver);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Reflect"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},".get."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"apply"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"undefined"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"arguments"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"p"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Proxy"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {},")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"get"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"target"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"prop"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"receiver"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(target "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," receiver);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Reflect"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".get."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"apply"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"undefined"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"arguments"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")))))),(0,l.kt)("p",null,"You can selectively choose to disable the rule in this case, or destructure the variables from the rest params:"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"p"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Proxy"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {},")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"get"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"..."),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"args"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ["),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"target"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"prop"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"receiver"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"] "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," args;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(target "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," receiver);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"Reflect"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"get"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"..."),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"args);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},");"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"p"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Proxy"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {},")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"get"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"..."),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"args"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ["),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"target"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"prop"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"receiver"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"] "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," args;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(target "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," receiver);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"Reflect"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"get"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"..."),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"args);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")))))),(0,l.kt)("p",null,"Note however that this changes the arity of the function, which may break some code."),(0,l.kt)("h3",{id:"prefer-spread"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-spread"},(0,l.kt)("inlineCode",{parentName:"a"},"prefer-spread"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Use spread syntax instead of ",(0,l.kt)("inlineCode",{parentName:"p"},"Function.prototype.apply"),". Note however that this rule does not flag patterns such as ",(0,l.kt)("inlineCode",{parentName:"p"},"Math.max.apply(undefined, args)"),", although the ",(0,l.kt)("inlineCode",{parentName:"p"},"apply")," is still redundant."),(0,l.kt)("h2",{id:"return-statements"},"Return statements"),(0,l.kt)("h3",{id:"consistent-return"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/consistent-return"},(0,l.kt)("inlineCode",{parentName:"a"},"consistent-return"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Require not declaring ",(0,l.kt)("inlineCode",{parentName:"li"},"undefined")," in return statement if not needing a return value (",(0,l.kt)("inlineCode",{parentName:"li"},"treatUndefinedAsUnspecified: false"),")"))),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ts(7030): Not all code paths return a value.")," (with ",(0,l.kt)("a",{parentName:"li",href:"https://www.typescriptlang.org/tsconfig#noImplicitReturns"},(0,l.kt)("inlineCode",{parentName:"a"},"noImplicitReturns")),")")))),(0,l.kt)("p",null,"We require all return statements to be either explicitly returning a value or implicitly returning ",(0,l.kt)("inlineCode",{parentName:"p"},"undefined")," (in case of ",(0,l.kt)("inlineCode",{parentName:"p"},"void"),"-returning functions). Because most of our code is already type-checked by TypeScript, which surfaces the implicitly returned ",(0,l.kt)("inlineCode",{parentName:"p"},"undefined")," in the return type, this rule is more for aesthetic purposes. It also helps us find all possible return values at a glance."),(0,l.kt)("h3",{id:"no-useless-return"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-return"},(0,l.kt)("inlineCode",{parentName:"a"},"no-useless-return"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Do not use ",(0,l.kt)("inlineCode",{parentName:"p"},"return")," when it doesn't change the control flow of the function."),(0,l.kt)("h2",{id:"arrow-functions"},"Arrow functions"),(0,l.kt)("h3",{id:"arrow-body-style"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/arrow-body-style"},(0,l.kt)("inlineCode",{parentName:"a"},"arrow-body-style"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error"),(0,l.kt)("li",{parentName:"ul"},"Configuration:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"Require omitted braces and implicit return when possible (",(0,l.kt)("inlineCode",{parentName:"li"},'"as-needed"'),")"),(0,l.kt)("li",{parentName:"ul"},"Do not treat object literals as special case (",(0,l.kt)("inlineCode",{parentName:"li"},"requireReturnForObjectLiteral: false"),")")))),(0,l.kt)("p",null,"Implicit returning is much cleaner."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"peopleWithIDs"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," people."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"map"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"p"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"id"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ({ "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"..."),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"p, id }));"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"peopleWithIDs"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," people."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"map"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"p"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"id"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ({ "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"..."),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"p, id }));")))))),(0,l.kt)("p",null,"Useless braces and ",(0,l.kt)("inlineCode",{parentName:"p"},"return"),"s can be artifacts from refactoring, which increases indentation and line count without much value. Enforcing implicit return also encourages future refactors to fit logic within one expression instead of using multiple assignments and control flow."),(0,l.kt)("h2",{id:"this"},(0,l.kt)("inlineCode",{parentName:"h2"},"this")),(0,l.kt)("h3",{id:"consistent-this"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/consistent-this"},(0,l.kt)("inlineCode",{parentName:"a"},"consistent-this"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off"),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/js-style-guide/typescript/base#no-this-alias"},(0,l.kt)("inlineCode",{parentName:"a"},"@typescript-eslint/no-this-alias")))))),(0,l.kt)("p",null,"We warn against ",(0,l.kt)("inlineCode",{parentName:"p"},"this")," aliasing altogether, but when it's inevitable (for example, you need two ",(0,l.kt)("inlineCode",{parentName:"p"},"this")," values within one function), you should use a semantic name instead of ",(0,l.kt)("inlineCode",{parentName:"p"},"self")," or ",(0,l.kt)("inlineCode",{parentName:"p"},"that"),"."),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"Foo"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"bar"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"str"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"fooInstance"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"JSON"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"parse"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(str, "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"key"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"value"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," value "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"!=="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"string"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," value;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," (")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"value")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"replace"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,l.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\{\\{"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"name"),(0,l.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\}\\}"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"g"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", fooInstance.name)")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// The `this` here is the object that `key` belongs to")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"replace"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,l.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\{\\{"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"(?<"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"prop"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},">"),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"*?"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},")"),(0,l.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\}\\}"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"g"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"m"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"p1"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"o"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"s"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"groups"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"[groups.prop],")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," )")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," );")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," });")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"Foo"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"bar"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"str"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"fooInstance"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"JSON"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"parse"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(str, "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"key"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"value"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," value "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"!=="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"string"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," value;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"value")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"replace"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,l.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\{\\{"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"name"),(0,l.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\}\\}"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"g"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", fooInstance.name)")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// The `this` here is the object that `key` belongs to")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"replace"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,l.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\{\\{"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"(?<"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"prop"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},">"),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"*?"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},")"),(0,l.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\}\\}"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"g"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"m"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"p1"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"o"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"s"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"groups"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[groups.prop],")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," )")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," );")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," });")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.kt)("h3",{id:"no-extra-bind"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-extra-bind"},(0,l.kt)("inlineCode",{parentName:"a"},"no-extra-bind"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"You should only use ",(0,l.kt)("inlineCode",{parentName:"p"},"bind")," (with one argument) when the ",(0,l.kt)("inlineCode",{parentName:"p"},"this")," value is actually significant. Do not use it on arrow functions or functions that don't use ",(0,l.kt)("inlineCode",{parentName:"p"},"this"),"."),(0,l.kt)("h3",{id:"no-invalid-this"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-invalid-this"},(0,l.kt)("inlineCode",{parentName:"a"},"no-invalid-this"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: off"),(0,l.kt)("li",{parentName:"ul"},"Related:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/js-style-guide/typescript/base#no-invalid-this"},(0,l.kt)("inlineCode",{parentName:"a"},"@typescript-eslint/no-invalid-this")))))),(0,l.kt)("p",null,"The base rule has too many false positives, because many callbacks are called with a valid ",(0,l.kt)("inlineCode",{parentName:"p"},"this"),":"),(0,l.kt)("div",{className:"shiki-twoslash-fragment"},(0,l.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"JSON"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"parse"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(str, "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"key"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#953800"}},"value"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," value "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"!=="),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"string"'),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," value;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}}," value."),(0,l.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"replace"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,l.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\{\\{"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"name"),(0,l.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\}\\}"),(0,l.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,l.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"g"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},".name);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#24292F"}},"});"))))),(0,l.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.kt)("div",{parentName:"pre",className:"code-container"},(0,l.kt)("code",{parentName:"div"},(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"JSON"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"parse"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(str, "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"key"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"value"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," value "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"!=="),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"string"'),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," value;")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," value."),(0,l.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"replace"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,l.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\{\\{"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"name"),(0,l.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\}\\}"),(0,l.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,l.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"g"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".name);")),(0,l.kt)("div",{parentName:"code",className:"line"},(0,l.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"});")))))),(0,l.kt)("h3",{id:"no-useless-call"},(0,l.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-call"},(0,l.kt)("inlineCode",{parentName:"a"},"no-useless-call"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Severity: error")),(0,l.kt)("p",null,"Do not use ",(0,l.kt)("inlineCode",{parentName:"p"},"call")," or ",(0,l.kt)("inlineCode",{parentName:"p"},"apply")," when it doesn't change the ",(0,l.kt)("inlineCode",{parentName:"p"},"this")," value of the function. Before spreading, you may have to use ",(0,l.kt)("inlineCode",{parentName:"p"},"foo.apply(undefined, args)"),", but now you can simply use ",(0,l.kt)("inlineCode",{parentName:"p"},"foo(...args)")," (although this is not checked by the rule)."))}m.isMDXComponent=!0},5318:(e,a,t)=>{t.d(a,{Zo:()=>c,kt:()=>k});var n=t(7378);function l(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function s(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function r(e){for(var a=1;a=0||(l[t]=e[t]);return l}(e,a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var p=n.createContext({}),i=function(e){var a=n.useContext(p),t=a;return e&&(t="function"==typeof e?e(a):r(r({},a),e)),t},c=function(e){var a=i(e.components);return n.createElement(p.Provider,{value:a},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},N=n.forwardRef((function(e,a){var t=e.components,l=e.mdxType,s=e.originalType,p=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),d=i(t),N=l,k=d["".concat(p,".").concat(N)]||d[N]||m[N]||s;return t?n.createElement(k,r(r({ref:a},c),{},{components:t})):n.createElement(k,r({ref:a},c))}));function k(e,a){var t=arguments,l=a&&a.mdxType;if("string"==typeof e||l){var s=t.length,r=new Array(s);r[0]=N;var o={};for(var p in a)hasOwnProperty.call(a,p)&&(o[p]=a[p]);o.originalType=e,o[d]="string"==typeof e?e:l,r[1]=o;for(var i=2;i{n.d(a,{xA:()=>y,yg:()=>g});var t=n(3696);function l(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function s(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}function r(e){for(var a=1;a=0||(l[n]=e[n]);return l}(e,a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var p=t.createContext({}),i=function(e){var a=t.useContext(p),n=a;return e&&(n="function"==typeof e?e(a):r(r({},a),e)),n},y=function(e){var a=i(e.components);return t.createElement(p.Provider,{value:a},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},m=t.forwardRef((function(e,a){var n=e.components,l=e.mdxType,s=e.originalType,p=e.parentName,y=o(e,["components","mdxType","originalType","parentName"]),c=i(n),m=l,g=c["".concat(p,".").concat(m)]||c[m]||d[m]||s;return n?t.createElement(g,r(r({ref:a},y),{},{components:n})):t.createElement(g,r({ref:a},y))}));function g(e,a){var n=arguments,l=a&&a.mdxType;if("string"==typeof e||l){var s=n.length,r=new Array(s);r[0]=m;var o={};for(var p in a)hasOwnProperty.call(a,p)&&(o[p]=a[p]);o.originalType=e,o[c]="string"==typeof e?e:l,r[1]=o;for(var i=2;i{n.r(a),n.d(a,{assets:()=>p,contentTitle:()=>r,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>i});var t=n(8102),l=(n(3696),n(9916));const s={sidebar_position:6},r="Functions",o={unversionedId:"eslint-base/functions",id:"eslint-base/functions",title:"Functions",description:"This page concerns styles for authoring functions, including the syntax for function declarations, arrow functions, and methods.",source:"@site/../docs/eslint-base/functions.md",sourceDirName:"eslint-base",slug:"/eslint-base/functions",permalink:"/js-style-guide/eslint-base/functions",draft:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"defaultSidebar",previous:{title:"Control flow",permalink:"/js-style-guide/eslint-base/control-flow"},next:{title:"Objects & classes",permalink:"/js-style-guide/eslint-base/objects-classes"}},p={},i=[{value:"When to create functions",id:"when-to-create-functions",level:2},{value:"Declaration",id:"declaration",level:2},{value:"func-style",id:"func-style",level:3},{value:"no-func-assign",id:"no-func-assign",level:3},{value:"no-inner-declarations",id:"no-inner-declarations",level:3},{value:"no-loop-func",id:"no-loop-func",level:3},{value:"prefer-arrow-callback",id:"prefer-arrow-callback",level:3},{value:"Names",id:"names",level:2},{value:"func-names",id:"func-names",level:3},{value:"func-name-matching",id:"func-name-matching",level:3},{value:"Bodies",id:"bodies",level:2},{value:"max-lines-per-function",id:"max-lines-per-function",level:3},{value:"max-nested-callbacks",id:"max-nested-callbacks",level:3},{value:"no-empty-function",id:"no-empty-function",level:3},{value:"Parameters & arguments",id:"parameters--arguments",level:2},{value:"default-param-last",id:"default-param-last",level:3},{value:"max-params",id:"max-params",level:3},{value:"no-caller",id:"no-caller",level:3},{value:"no-dupe-args",id:"no-dupe-args",level:3},{value:"no-param-reassign",id:"no-param-reassign",level:3},{value:"prefer-rest-params",id:"prefer-rest-params",level:3},{value:"prefer-spread",id:"prefer-spread",level:3},{value:"Return statements",id:"return-statements",level:2},{value:"consistent-return",id:"consistent-return",level:3},{value:"no-useless-return",id:"no-useless-return",level:3},{value:"Arrow functions",id:"arrow-functions",level:2},{value:"arrow-body-style",id:"arrow-body-style",level:3},{value:"this",id:"this",level:2},{value:"consistent-this",id:"consistent-this",level:3},{value:"no-extra-bind",id:"no-extra-bind",level:3},{value:"no-invalid-this",id:"no-invalid-this",level:3},{value:"no-useless-call",id:"no-useless-call",level:3}],y={toc:i},c="wrapper";function d(e){let{components:a,...n}=e;return(0,l.yg)(c,(0,t.A)({},y,n,{components:a,mdxType:"MDXLayout"}),(0,l.yg)("h1",{id:"functions"},"Functions"),(0,l.yg)("p",null,"This page concerns styles for authoring functions, including the syntax for function declarations, arrow functions, and methods."),(0,l.yg)("h2",{id:"when-to-create-functions"},"When to create functions"),(0,l.yg)("p",null,"The guide is: ",(0,l.yg)("strong",{parentName:"p"},"do not over-abstract"),". For example, this kind of code produces unnecessary runtime overhead, and more importantly, mental burden:"),(0,l.yg)("div",{className:"shiki-twoslash-fragment"},(0,l.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"resolveTarget"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ What does `resolveTarget` do?")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," filePath."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"endsWith"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'".js"'),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},")")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"?"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"`./build/js/${"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"}`")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"`./build/asset/${"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ It seems to return a different path when the extension is different, but")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// where is it useful?")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,l.yg)("div",{parentName:"code",className:"line"}),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"async"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"copyFile"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ `copyFile` sounds like a really generic name. Is it used in multiple places?")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Should I take caution when refactoring?")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"targetPath"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"resolveTarget"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(filePath);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ What does `resolveTarget` do again? *Going back to definition* Now I know")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// what it does, but the code is so long (not in this dumbed-down example),")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// I can't compare them side-by-side and understand exactly what the code")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// does step-by-step at a glance")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," fs."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"copyFile"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(filePath, targetPath);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"`Copied ${"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,l.yg)("div",{parentName:"code",className:"line"}),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Promise"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"all"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(files."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"map"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(copyFile));")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// ^ Does `copyFile` only do `fs.copyFile`? *Going back to definition* No, it")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// does much more. Of course I can name it as `copyFileToResolvedTargetAndLog`,")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// but then what's the point of abstraction?"))))),(0,l.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"resolveTarget"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ What does `resolveTarget` do?")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," filePath."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"endsWith"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'".js"'),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},")")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"?"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`./build/js/${"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`./build/asset/${"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ It seems to return a different path when the extension is different, but")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// where is it useful?")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,l.yg)("div",{parentName:"code",className:"line"}),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"async"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"copyFile"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ `copyFile` sounds like a really generic name. Is it used in multiple places?")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Should I take caution when refactoring?")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"targetPath"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"resolveTarget"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(filePath);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ What does `resolveTarget` do again? *Going back to definition* Now I know")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// what it does, but the code is so long (not in this dumbed-down example),")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// I can't compare them side-by-side and understand exactly what the code")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// does step-by-step at a glance")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," fs."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"copyFile"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(filePath, targetPath);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`Copied ${"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,l.yg)("div",{parentName:"code",className:"line"}),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Promise"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"all"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(files."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"map"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(copyFile));")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// ^ Does `copyFile` only do `fs.copyFile`? *Going back to definition* No, it")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// does much more. Of course I can name it as `copyFileToResolvedTargetAndLog`,")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// but then what's the point of abstraction?")))))),(0,l.yg)("p",null,"When you could just simply put everything into a single lambda and it still makes sense:"),(0,l.yg)("div",{className:"shiki-twoslash-fragment"},(0,l.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Promise"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"all"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(files."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"map"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"async"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"targetPath"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," filePath."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"endsWith"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"'.js'"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},")")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"?"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"`./build/js/${"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"}`")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"`./build/asset/${"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"await"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," fs."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"copyFile"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(filePath, targetPath);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"`Copied ${"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"})));"))))),(0,l.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Promise"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"all"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(files."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"map"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"async"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"targetPath"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," filePath."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"endsWith"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"'.js'"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},")")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"?"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`./build/js/${"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`./build/asset/${"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"await"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," fs."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"copyFile"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(filePath, targetPath);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`Copied ${"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"})));")))))),(0,l.yg)("p",null,"Keep in mind the rule of \"code for the average-intelligent\". When a sequence of operations is self-explanatory, you don't need to extract it into a separate function just to give it a name that mirrors exactly what's described with code."),(0,l.yg)("p",null,"In addition, ",(0,l.yg)("strong",{parentName:"p"},"do not export a function just to test it"),"."),(0,l.yg)("div",{className:"shiki-twoslash-fragment"},(0,l.yg)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:"copyFile.ts"},(0,l.yg)("div",{parentName:"pre",className:"code-title"},"copyFile.ts"),(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Is it used in multiple modules? Should I take caution when refactoring?")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// *Doing a global search* It's only used in this module and its accompanied")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// test file. But if I remove the `export`, I have to refactor the tests and")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// risk reduced test coverage. Yuck!")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"export"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"resolveTarget"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"string"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," filePath."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"endsWith"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'".js"'),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},")")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"?"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"`./build/js/${"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"}`")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"`./build/asset/${"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"}`"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.yg)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:"copyFile.ts"},(0,l.yg)("div",{parentName:"pre",className:"code-title"},"copyFile.ts"),(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Is it used in multiple modules? Should I take caution when refactoring?")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// *Doing a global search* It's only used in this module and its accompanied")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// test file. But if I remove the `export`, I have to refactor the tests and")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// risk reduced test coverage. Yuck!")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"export"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"resolveTarget"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"string"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," filePath."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"endsWith"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'".js"'),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},")")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"?"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`./build/js/${"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"`./build/asset/${"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"filePath"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"}`"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.yg)("div",{className:"shiki-twoslash-fragment"},(0,l.yg)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:"copyFile.test.ts"},(0,l.yg)("div",{parentName:"pre",className:"code-title"},"copyFile.test.ts"),(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"import"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," { resolveTarget } "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"from"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"./copyFile"'),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.yg)("div",{parentName:"code",className:"line"}),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Testing this function simply because tests are easy to write")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"describe"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"resolveTarget"'),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", () "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"it"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"works"'),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", () "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"expect"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"resolveTarget"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"foo.js"'),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"))."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"toEqual"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"./build/js/foo.js"'),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," });")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"});"))))),(0,l.yg)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:"copyFile.test.ts"},(0,l.yg)("div",{parentName:"pre",className:"code-title"},"copyFile.test.ts"),(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"import"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { resolveTarget } "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"from"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"./copyFile"'),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.yg)("div",{parentName:"code",className:"line"}),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Testing this function simply because tests are easy to write")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"describe"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"resolveTarget"'),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", () "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"it"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"works"'),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", () "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"expect"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"resolveTarget"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"foo.js"'),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"))."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"toEqual"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"./build/js/foo.js"'),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," });")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"});")))))),(0,l.yg)("p",null,"Tests are made for public APIs (or at least the useful functions that other internal modules use), not for internal implementations. Implementations may be refactored at any time and intermediate functions come and go, so don't tie your tests to them. Mock side-effects like ",(0,l.yg)("inlineCode",{parentName:"p"},"fs.readFile")," or provide fixtures instead of staying in the comfort zone of testing pure functions."),(0,l.yg)("p",null,"Keep in mind that refactoring doesn't only mean changing the implementations of existing functions or modules, but also removing and adding them. It is critical to make clear which downstream dependents will be affected."),(0,l.yg)("h2",{id:"declaration"},"Declaration"),(0,l.yg)("h3",{id:"func-style"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/func-style"},(0,l.yg)("inlineCode",{parentName:"a"},"func-style"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: warning"),(0,l.yg)("li",{parentName:"ul"},"Configuration:",(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},"Use function declaration over function expression (",(0,l.yg)("inlineCode",{parentName:"li"},'"declaration"'),")"),(0,l.yg)("li",{parentName:"ul"},"Allow arrow functions when using expressions (",(0,l.yg)("inlineCode",{parentName:"li"},"allowArrowFunctions: true"),")")))),(0,l.yg)("p",null,"We allow two kinds of functions: function declarations and arrow functions. There are some additional restrictions:"),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"At the top level, do not use ",(0,l.yg)("inlineCode",{parentName:"li"},"const func = () => ..."),". Always use ",(0,l.yg)("inlineCode",{parentName:"li"},"function func() { ... }"),", unless you need to type the function as a whole. This makes the code visually more balanced. This restriction is relaxed in nested functions (especially event listeners in React components)."),(0,l.yg)("li",{parentName:"ul"},"We allow function expressions in the rare case of declaring extra methods, such as ",(0,l.yg)("inlineCode",{parentName:"li"},"Foo.prototype.bar = function () { ... }"),'. This should be exceedingly rare but they are allowed by the rule nonetheless. However, if the "method" doesn\'t rely on ',(0,l.yg)("inlineCode",{parentName:"li"},"this"),", prefer using arrow functions."),(0,l.yg)("li",{parentName:"ul"},"To declare function properties in an object literal, use the method syntax ",(0,l.yg)("inlineCode",{parentName:"li"},"{ foo() { ... } }")," instead of arrow functions ",(0,l.yg)("inlineCode",{parentName:"li"},"{ foo: () => ... }")," to make it appear shorter. Exceptions are allowed if using arrow functions allows using concise body which saves lines. This is enforced by ",(0,l.yg)("a",{parentName:"li",href:"/js-style-guide/eslint-base/objects-classes#object-shorthand"},(0,l.yg)("inlineCode",{parentName:"a"},"object-shorthand")),".")),(0,l.yg)("h3",{id:"no-func-assign"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-func-assign"},(0,l.yg)("inlineCode",{parentName:"a"},"no-func-assign"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: error"),(0,l.yg)("li",{parentName:"ul"},"Related:",(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("inlineCode",{parentName:"li"},"ts(2630): Cannot assign to 'a' because it is a function."))))),(0,l.yg)("p",null,"The reason is the same as ",(0,l.yg)("a",{parentName:"p",href:"/js-style-guide/eslint-base/objects-classes#no-class-assign"},(0,l.yg)("inlineCode",{parentName:"a"},"no-class-assign")),". If you want to wrap your function, create a new variable instead."),(0,l.yg)("div",{className:"shiki-twoslash-fragment"},(0,l.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"Component"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {}")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"ComponentMemo"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," React."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"memo"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(Component);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Or directly:")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"export"),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"default"),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"React"),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"memo"),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"Component"),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},")"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},";"))))),(0,l.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"Component"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {}")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"ComponentMemo"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," React."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"memo"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(Component);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Or directly:")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"export"),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"default"),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"React"),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"memo"),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"Component"),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},")"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")))))),(0,l.yg)("h3",{id:"no-inner-declarations"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-inner-declarations"},(0,l.yg)("inlineCode",{parentName:"a"},"no-inner-declarations"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: off")),(0,l.yg)("p",null,"Block-scoped vars are already reported by ",(0,l.yg)("a",{parentName:"p",href:"/js-style-guide/eslint-base/variables-names#block-scoped-var"},(0,l.yg)("inlineCode",{parentName:"a"},"block-scoped-var")),". Function declarations inside blocks behave as expected in strict mode, so there's no good reason to forbid them."),(0,l.yg)("h3",{id:"no-loop-func"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-loop-func"},(0,l.yg)("inlineCode",{parentName:"a"},"no-loop-func"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: off")),(0,l.yg)("p",null,"While this rule could prevent bugs in theory, we think in the vast majority of cases, a closure is actually intended to read the latest value instead of the value at the time the function was created. In addition, many functions are synchronously called (such as array methods) and the rule just false-positives. If stale references actually cause bugs, you should catch them through tests."),(0,l.yg)("h3",{id:"prefer-arrow-callback"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-arrow-callback"},(0,l.yg)("inlineCode",{parentName:"a"},"prefer-arrow-callback"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: error"),(0,l.yg)("li",{parentName:"ul"},"Configuration:",(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},"Do not allow named function expressions (",(0,l.yg)("inlineCode",{parentName:"li"},"allowNamedFunctions: true"),")"),(0,l.yg)("li",{parentName:"ul"},"Use arrow functions even when the function expression references ",(0,l.yg)("inlineCode",{parentName:"li"},"this")," (",(0,l.yg)("inlineCode",{parentName:"li"},"allowUnboundThis: true"),")")))),(0,l.yg)("p",null,"Always use arrow callbacks. If the callback relies on the ",(0,l.yg)("inlineCode",{parentName:"p"},"this")," value or needs to be named, use a function declaration instead. Use of function expressions may be a sign of legacy code or unfamiliarity with the language."),(0,l.yg)("h2",{id:"names"},"Names"),(0,l.yg)("h3",{id:"func-names"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/func-names"},(0,l.yg)("inlineCode",{parentName:"a"},"func-names"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: warning"),(0,l.yg)("li",{parentName:"ul"},"Configuration:",(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},"Require function expressions to be named if one can't be inferred (",(0,l.yg)("inlineCode",{parentName:"li"},'"as-needed"'),")")))),(0,l.yg)("p",null,"In the same vein as ",(0,l.yg)("inlineCode",{parentName:"p"},"func-name-matching"),", this rule is to ensure the readability of the stack trace and the reliability of the ",(0,l.yg)("inlineCode",{parentName:"p"},"func.name")," property."),(0,l.yg)("h3",{id:"func-name-matching"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/func-name-matching"},(0,l.yg)("inlineCode",{parentName:"a"},"func-name-matching"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: warning"),(0,l.yg)("li",{parentName:"ul"},"Configuration:",(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},"Always require the function expression's name to match the variable it's assigned to. (",(0,l.yg)("inlineCode",{parentName:"li"},'"always"'),")")))),(0,l.yg)("p",null,"Although we rarely use function expressions and always prefer either arrow functions or declarations, in cases where function expressions are necessary, the variable name should match the name of declaration. It's mostly to ensure that the error stack is always as expected: the variable name does not appear in the stack trace and may result in obscure call stacks."),(0,l.yg)("div",{className:"shiki-twoslash-fragment"},(0,l.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"longFoo"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"pass"'),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"};")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"foo2"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"longFoo"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"throw"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Error"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"panic"'),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"};")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"bar"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"foo"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"foo2"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"bar"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// This throws error stack:")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Error: panic")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// at longFoo (...)")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// at bar (...)"))))),(0,l.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"longFoo"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"pass"'),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo2"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"longFoo"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"throw"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Error"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"panic"'),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"bar"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"foo2"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"bar"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// This throws error stack:")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Error: panic")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// at longFoo (...)")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// at bar (...)")))))),(0,l.yg)("p",null,"The ",(0,l.yg)("inlineCode",{parentName:"p"},"longFoo")," is ambiguous. Although there's also a source position in the stack trace, it's better if we can instantly recognize the offending code when handling bug reports containing stack traces."),(0,l.yg)("h2",{id:"bodies"},"Bodies"),(0,l.yg)("h3",{id:"max-lines-per-function"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-lines-per-function"},(0,l.yg)("inlineCode",{parentName:"a"},"max-lines-per-function"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: off")),(0,l.yg)("p",null,"See our opinion on ",(0,l.yg)("a",{parentName:"p",href:"/js-style-guide/eslint-base/control-flow#complexity"},"complexity"),"."),(0,l.yg)("h3",{id:"max-nested-callbacks"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-nested-callbacks"},(0,l.yg)("inlineCode",{parentName:"a"},"max-nested-callbacks"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: off")),(0,l.yg)("p",null,"See our opinion on ",(0,l.yg)("a",{parentName:"p",href:"/js-style-guide/eslint-base/control-flow#complexity"},"complexity"),"."),(0,l.yg)("h3",{id:"no-empty-function"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-empty-function"},(0,l.yg)("inlineCode",{parentName:"a"},"no-empty-function"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: off"),(0,l.yg)("li",{parentName:"ul"},"Related:",(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("inlineCode",{parentName:"li"},"@typescript-eslint/no-empty-function"))))),(0,l.yg)("p",null,"We allow empty functions, because they are frequently needed for no-op callbacks."),(0,l.yg)("h2",{id:"parameters--arguments"},"Parameters & arguments"),(0,l.yg)("h3",{id:"default-param-last"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/default-param-last"},(0,l.yg)("inlineCode",{parentName:"a"},"default-param-last"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: off"),(0,l.yg)("li",{parentName:"ul"},"Related:",(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"/js-style-guide/typescript/base#default-param-last"},(0,l.yg)("inlineCode",{parentName:"a"},"@typescript-eslint/default-param-last"))),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("inlineCode",{parentName:"li"},"ts(1016): A required parameter cannot follow an optional parameter."))))),(0,l.yg)("p",null,'The base rule has too many false positives because in many cases, the parameters following the "default" are optional too, just without defaults. Even in JavaScript, we would use TS declarations to make sure we author sane APIs.'),(0,l.yg)("h3",{id:"max-params"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-params"},(0,l.yg)("inlineCode",{parentName:"a"},"max-params"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: off")),(0,l.yg)("p",null,"See our opinion on ",(0,l.yg)("a",{parentName:"p",href:"/js-style-guide/eslint-base/control-flow#complexity"},"complexity"),". However, you should actively consider if you actually need many parameters. In the case when the number of parameters gets large, consider using an object instead."),(0,l.yg)("h3",{id:"no-caller"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-caller"},(0,l.yg)("inlineCode",{parentName:"a"},"no-caller"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: error")),(0,l.yg)("p",null,"From the ESLint docs:"),(0,l.yg)("blockquote",null,(0,l.yg)("p",{parentName:"blockquote"},"The use of ",(0,l.yg)("inlineCode",{parentName:"p"},"arguments.caller")," and ",(0,l.yg)("inlineCode",{parentName:"p"},"arguments.callee")," make several code optimizations impossible. They have been deprecated in future versions of JavaScript and their use is forbidden in ECMAScript 5 while in strict mode.")),(0,l.yg)("h3",{id:"no-dupe-args"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-dupe-args"},(0,l.yg)("inlineCode",{parentName:"a"},"no-dupe-args"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: error"),(0,l.yg)("li",{parentName:"ul"},"Related:",(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("inlineCode",{parentName:"li"},"SyntaxError: Duplicate parameter name not allowed in this context"))))),(0,l.yg)("p",null,"Duplicate parameter names are a syntax error in strict mode."),(0,l.yg)("h3",{id:"no-param-reassign"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-param-reassign"},(0,l.yg)("inlineCode",{parentName:"a"},"no-param-reassign"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: off")),(0,l.yg)("p",null,"We think it's fine to reassign parameters, particularly for normalization purposes, if you are interfacing with external code."),(0,l.yg)("div",{className:"shiki-twoslash-fragment"},(0,l.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"add"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"a"),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"b"),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," a "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Number"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(a); "),(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Make sure `a` and `b` are actually numbers")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," b "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Number"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(b);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," a "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"+"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," b;")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"add"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"a"),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"b"),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Number"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(a); "),(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Make sure `a` and `b` are actually numbers")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," b "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Number"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(b);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"+"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," b;")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.yg)("p",null,"Do not reassign parameters if it drastically changes the semantics of the parameter. In TypeScript, you cannot change the type of the parameter, and you should strive to do the same in JavaScript."),(0,l.yg)("h3",{id:"prefer-rest-params"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-rest-params"},(0,l.yg)("inlineCode",{parentName:"a"},"prefer-rest-params"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: error")),(0,l.yg)("p",null,"Use rest parameters instead of ",(0,l.yg)("inlineCode",{parentName:"p"},"arguments"),". Rest parameters are more versatile because they are real arrays, and can be used in arrow functions."),(0,l.yg)("p",null,"The only known exception is you want to use the arguments both named and as an array:"),(0,l.yg)("div",{className:"shiki-twoslash-fragment"},(0,l.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"p"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Proxy"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {},")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"get"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"target"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"prop"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"receiver"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(target "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," receiver);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Reflect"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},".get."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"apply"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"undefined"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"arguments"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},");"))))),(0,l.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"p"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Proxy"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {},")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"get"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"target"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"prop"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"receiver"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(target "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," receiver);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Reflect"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".get."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"apply"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"undefined"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"arguments"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")))))),(0,l.yg)("p",null,"You can selectively choose to disable the rule in this case, or destructure the variables from the rest params:"),(0,l.yg)("div",{className:"shiki-twoslash-fragment"},(0,l.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"p"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Proxy"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {},")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"get"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"..."),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"args"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ["),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"target"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"prop"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"receiver"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"] "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," args;")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," console."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(target "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"==="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," receiver);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"Reflect"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"get"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"..."),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"args);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},");"))))),(0,l.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"p"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Proxy"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {},")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"get"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"..."),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"args"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ["),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"target"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"prop"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"receiver"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"] "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," args;")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," console."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(target "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"==="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," receiver);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"Reflect"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"get"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"..."),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"args);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")))))),(0,l.yg)("p",null,"Note however that this changes the arity of the function, which may break some code."),(0,l.yg)("h3",{id:"prefer-spread"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-spread"},(0,l.yg)("inlineCode",{parentName:"a"},"prefer-spread"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: error")),(0,l.yg)("p",null,"Use spread syntax instead of ",(0,l.yg)("inlineCode",{parentName:"p"},"Function.prototype.apply"),". Note however that this rule does not flag patterns such as ",(0,l.yg)("inlineCode",{parentName:"p"},"Math.max.apply(undefined, args)"),", although the ",(0,l.yg)("inlineCode",{parentName:"p"},"apply")," is still redundant."),(0,l.yg)("h2",{id:"return-statements"},"Return statements"),(0,l.yg)("h3",{id:"consistent-return"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/consistent-return"},(0,l.yg)("inlineCode",{parentName:"a"},"consistent-return"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: error"),(0,l.yg)("li",{parentName:"ul"},"Configuration:",(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},"Require not declaring ",(0,l.yg)("inlineCode",{parentName:"li"},"undefined")," in return statement if not needing a return value (",(0,l.yg)("inlineCode",{parentName:"li"},"treatUndefinedAsUnspecified: false"),")"))),(0,l.yg)("li",{parentName:"ul"},"Related:",(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("inlineCode",{parentName:"li"},"ts(7030): Not all code paths return a value.")," (with ",(0,l.yg)("a",{parentName:"li",href:"https://www.typescriptlang.org/tsconfig#noImplicitReturns"},(0,l.yg)("inlineCode",{parentName:"a"},"noImplicitReturns")),")")))),(0,l.yg)("p",null,"We require all return statements to be either explicitly returning a value or implicitly returning ",(0,l.yg)("inlineCode",{parentName:"p"},"undefined")," (in case of ",(0,l.yg)("inlineCode",{parentName:"p"},"void"),"-returning functions). Because most of our code is already type-checked by TypeScript, which surfaces the implicitly returned ",(0,l.yg)("inlineCode",{parentName:"p"},"undefined")," in the return type, this rule is more for aesthetic purposes. It also helps us find all possible return values at a glance."),(0,l.yg)("h3",{id:"no-useless-return"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-return"},(0,l.yg)("inlineCode",{parentName:"a"},"no-useless-return"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: error")),(0,l.yg)("p",null,"Do not use ",(0,l.yg)("inlineCode",{parentName:"p"},"return")," when it doesn't change the control flow of the function."),(0,l.yg)("h2",{id:"arrow-functions"},"Arrow functions"),(0,l.yg)("h3",{id:"arrow-body-style"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/arrow-body-style"},(0,l.yg)("inlineCode",{parentName:"a"},"arrow-body-style"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: error"),(0,l.yg)("li",{parentName:"ul"},"Configuration:",(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},"Require omitted braces and implicit return when possible (",(0,l.yg)("inlineCode",{parentName:"li"},'"as-needed"'),")"),(0,l.yg)("li",{parentName:"ul"},"Do not treat object literals as special case (",(0,l.yg)("inlineCode",{parentName:"li"},"requireReturnForObjectLiteral: false"),")")))),(0,l.yg)("p",null,"Implicit returning is much cleaner."),(0,l.yg)("div",{className:"shiki-twoslash-fragment"},(0,l.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"peopleWithIDs"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," people."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"map"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(("),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"p"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"id"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ({ "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"..."),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"p, id }));"))))),(0,l.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"peopleWithIDs"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," people."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"map"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(("),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"p"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"id"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ({ "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"..."),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"p, id }));")))))),(0,l.yg)("p",null,"Useless braces and ",(0,l.yg)("inlineCode",{parentName:"p"},"return"),"s can be artifacts from refactoring, which increases indentation and line count without much value. Enforcing implicit return also encourages future refactors to fit logic within one expression instead of using multiple assignments and control flow."),(0,l.yg)("h2",{id:"this"},(0,l.yg)("inlineCode",{parentName:"h2"},"this")),(0,l.yg)("h3",{id:"consistent-this"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/consistent-this"},(0,l.yg)("inlineCode",{parentName:"a"},"consistent-this"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: off"),(0,l.yg)("li",{parentName:"ul"},"Related:",(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"/js-style-guide/typescript/base#no-this-alias"},(0,l.yg)("inlineCode",{parentName:"a"},"@typescript-eslint/no-this-alias")))))),(0,l.yg)("p",null,"We warn against ",(0,l.yg)("inlineCode",{parentName:"p"},"this")," aliasing altogether, but when it's inevitable (for example, you need two ",(0,l.yg)("inlineCode",{parentName:"p"},"this")," values within one function), you should use a semantic name instead of ",(0,l.yg)("inlineCode",{parentName:"p"},"self")," or ",(0,l.yg)("inlineCode",{parentName:"p"},"that"),"."),(0,l.yg)("div",{className:"shiki-twoslash-fragment"},(0,l.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"Foo"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"bar"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"str"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"fooInstance"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"JSON"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"parse"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(str, "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"key"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"value"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," value "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"!=="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"string"'),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," value;")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," (")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"value")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"replace"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,l.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\{\\{"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"name"),(0,l.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\}\\}"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"g"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", fooInstance.name)")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// The `this` here is the object that `key` belongs to")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"replace"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,l.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\{\\{"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"(?<"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"prop"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},">"),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"."),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"*?"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},")"),(0,l.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\}\\}"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"g"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"m"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"p1"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"o"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"s"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"groups"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"[groups.prop],")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," )")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," );")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," });")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,l.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"Foo"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"bar"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"str"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"fooInstance"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"JSON"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"parse"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(str, "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"key"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"value"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," value "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"!=="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"string"'),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," value;")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," (")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"value")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"replace"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,l.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\{\\{"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"name"),(0,l.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\}\\}"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"g"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", fooInstance.name)")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// The `this` here is the object that `key` belongs to")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"replace"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,l.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\{\\{"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"(?<"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"prop"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},">"),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"."),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"*?"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},")"),(0,l.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\}\\}"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"g"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"m"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"p1"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"o"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"s"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"groups"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"[groups.prop],")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," )")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," );")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," });")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,l.yg)("h3",{id:"no-extra-bind"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-extra-bind"},(0,l.yg)("inlineCode",{parentName:"a"},"no-extra-bind"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: error")),(0,l.yg)("p",null,"You should only use ",(0,l.yg)("inlineCode",{parentName:"p"},"bind")," (with one argument) when the ",(0,l.yg)("inlineCode",{parentName:"p"},"this")," value is actually significant. Do not use it on arrow functions or functions that don't use ",(0,l.yg)("inlineCode",{parentName:"p"},"this"),"."),(0,l.yg)("h3",{id:"no-invalid-this"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-invalid-this"},(0,l.yg)("inlineCode",{parentName:"a"},"no-invalid-this"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: off"),(0,l.yg)("li",{parentName:"ul"},"Related:",(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"/js-style-guide/typescript/base#no-invalid-this"},(0,l.yg)("inlineCode",{parentName:"a"},"@typescript-eslint/no-invalid-this")))))),(0,l.yg)("p",null,"The base rule has too many false positives, because many callbacks are called with a valid ",(0,l.yg)("inlineCode",{parentName:"p"},"this"),":"),(0,l.yg)("div",{className:"shiki-twoslash-fragment"},(0,l.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"JSON"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"."),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"parse"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(str, "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"key"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#953800"}},"value"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"if"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"typeof"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," value "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"!=="),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"string"'),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," value;")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}}," value."),(0,l.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"replace"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,l.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\{\\{"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"name"),(0,l.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\}\\}"),(0,l.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,l.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"g"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},".name);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#24292F"}},"});"))))),(0,l.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,l.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,l.yg)("div",{parentName:"pre",className:"code-container"},(0,l.yg)("code",{parentName:"div"},(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"JSON"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"."),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"parse"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(str, "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"key"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"value"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"if"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"typeof"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," value "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"!=="),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"string"'),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," value;")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," value."),(0,l.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"replace"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,l.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\{\\{"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"name"),(0,l.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\}\\}"),(0,l.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,l.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"g"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,l.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".name);")),(0,l.yg)("div",{parentName:"code",className:"line"},(0,l.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"});")))))),(0,l.yg)("h3",{id:"no-useless-call"},(0,l.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-call"},(0,l.yg)("inlineCode",{parentName:"a"},"no-useless-call"))),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},"Severity: error")),(0,l.yg)("p",null,"Do not use ",(0,l.yg)("inlineCode",{parentName:"p"},"call")," or ",(0,l.yg)("inlineCode",{parentName:"p"},"apply")," when it doesn't change the ",(0,l.yg)("inlineCode",{parentName:"p"},"this")," value of the function. Before spreading, you may have to use ",(0,l.yg)("inlineCode",{parentName:"p"},"foo.apply(undefined, args)"),", but now you can simply use ",(0,l.yg)("inlineCode",{parentName:"p"},"foo(...args)")," (although this is not checked by the rule)."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ec400d68.0e864000.js b/assets/js/ec400d68.0e864000.js deleted file mode 100644 index ebf1e19..0000000 --- a/assets/js/ec400d68.0e864000.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[529],{9883:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>o,toc:()=>p});var r=a(2685),n=(a(7378),a(5318));const l={sidebar_position:2},s="Literals",o={unversionedId:"eslint-base/literals",id:"eslint-base/literals",title:"Literals",description:"This page discusses styles for number, string, and regex literals, as well as template/symbol expressions.",source:"@site/../docs/eslint-base/literals.md",sourceDirName:"eslint-base",slug:"/eslint-base/literals",permalink:"/js-style-guide/eslint-base/literals",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"defaultSidebar",previous:{title:"General formatting",permalink:"/js-style-guide/eslint-base/formatting"},next:{title:"Variables & names",permalink:"/js-style-guide/eslint-base/variables-names"}},i={},p=[{value:"Number literals",id:"number-literals",level:2},{value:"no-loss-of-precision",id:"no-loss-of-precision",level:3},{value:"no-magic-numbers",id:"no-magic-numbers",level:3},{value:"no-octal",id:"no-octal",level:3},{value:"prefer-numeric-literals",id:"prefer-numeric-literals",level:3},{value:"radix",id:"radix",level:3},{value:"String literals",id:"string-literals",level:2},{value:"no-multi-str",id:"no-multi-str",level:3},{value:"no-nonoctal-decimal-escape",id:"no-nonoctal-decimal-escape",level:3},{value:"no-octal-escape",id:"no-octal-escape",level:3},{value:"no-script-url",id:"no-script-url",level:3},{value:"no-template-curly-in-string",id:"no-template-curly-in-string",level:3},{value:"no-useless-concat",id:"no-useless-concat",level:3},{value:"no-useless-escape",id:"no-useless-escape",level:3},{value:"prefer-template",id:"prefer-template",level:3},{value:"Regular expressions",id:"regular-expressions",level:2},{value:"Prefer concise syntax",id:"prefer-concise-syntax",level:3},{value:"no-control-regex",id:"no-control-regex",level:3},{value:"no-div-regex",id:"no-div-regex",level:3},{value:"no-empty-character-class",id:"no-empty-character-class",level:3},{value:"no-invalid-regexp",id:"no-invalid-regexp",level:3},{value:"no-misleading-character-class",id:"no-misleading-character-class",level:3},{value:"no-regex-spaces",id:"no-regex-spaces",level:3},{value:"no-useless-backreference",id:"no-useless-backreference",level:3},{value:"prefer-named-capture-group",id:"prefer-named-capture-group",level:3},{value:"prefer-regex-literals",id:"prefer-regex-literals",level:3},{value:"require-unicode-regexp",id:"require-unicode-regexp",level:3},{value:"Symbols",id:"symbols",level:2},{value:"symbol-description",id:"symbol-description",level:3}],c={toc:p},d="wrapper";function m(e){let{components:t,...a}=e;return(0,n.kt)(d,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"literals"},"Literals"),(0,n.kt)("p",null,"This page discusses styles for number, string, and regex literals, as well as template/symbol expressions."),(0,n.kt)("h2",{id:"number-literals"},"Number literals"),(0,n.kt)("h3",{id:"no-loss-of-precision"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-loss-of-precision"},(0,n.kt)("inlineCode",{parentName:"a"},"no-loss-of-precision"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,"Do not use numbers literals that don't represent what they look like. For example, ",(0,n.kt)("inlineCode",{parentName:"p"},"5123000000000000000000000000001")," does not represent that number. Note that this rule works automatically with literal types."),(0,n.kt)("h3",{id:"no-magic-numbers"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-magic-numbers"},(0,n.kt)("inlineCode",{parentName:"a"},"no-magic-numbers"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: off")),(0,n.kt)("p",null,"You are free to use numbers as you see fit."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"for"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," i "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; i "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"<"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," groups."),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"length"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; i "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"+="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"x"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," groups[i];")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"y"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," groups[i "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"+"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"];")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"for"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," i "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; i "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"<"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," groups."),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"length"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; i "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"+="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"x"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," groups[i];")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"y"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," groups[i "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"+"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"];")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,n.kt)("p",null,"Use comments if the numbers are not self-explanatory."),(0,n.kt)("h3",{id:"no-octal"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-octal"},(0,n.kt)("inlineCode",{parentName:"a"},"no-octal"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ts(1489): Decimals with leading zeros are not allowed."))))),(0,n.kt)("p",null,"Do not use legacy octal literals (",(0,n.kt)("inlineCode",{parentName:"p"},"011"),"). They are deprecated and are syntax errors in strict mode. Use ",(0,n.kt)("inlineCode",{parentName:"p"},"0o")," instead."),(0,n.kt)("h3",{id:"prefer-numeric-literals"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-numeric-literals"},(0,n.kt)("inlineCode",{parentName:"a"},"prefer-numeric-literals"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,"Use ",(0,n.kt)("inlineCode",{parentName:"p"},"0b")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"0o")," number literals instead of ",(0,n.kt)("inlineCode",{parentName:"p"},"parseInt")," with a static string."),(0,n.kt)("h3",{id:"radix"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/radix"},(0,n.kt)("inlineCode",{parentName:"a"},"radix"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Configuration:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Always require a radix (",(0,n.kt)("inlineCode",{parentName:"li"},'"always"'),")")))),(0,n.kt)("p",null,"You should always use ",(0,n.kt)("inlineCode",{parentName:"p"},"parseInt")," with a radix. This prevents accidental behavior inconsistencies when the string starts with ",(0,n.kt)("inlineCode",{parentName:"p"},"0")," or ",(0,n.kt)("inlineCode",{parentName:"p"},"0x"),". If you intentionally want to accommodate many number formats, use the ",(0,n.kt)("inlineCode",{parentName:"p"},"Number")," constructor instead."),(0,n.kt)("h2",{id:"string-literals"},"String literals"),(0,n.kt)("h3",{id:"no-multi-str"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-multi-str"},(0,n.kt)("inlineCode",{parentName:"a"},"no-multi-str"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,"Do not use ",(0,n.kt)("inlineCode",{parentName:"p"},"\\")," to split strings across multiple lines\u2014it doesn't work well with indentation. Write string literals that are as long as you want."),(0,n.kt)("h3",{id:"no-nonoctal-decimal-escape"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-nonoctal-decimal-escape"},(0,n.kt)("inlineCode",{parentName:"a"},"no-nonoctal-decimal-escape"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,"Do not use ",(0,n.kt)("inlineCode",{parentName:"p"},"\\8")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"\\9")," in string literals because they are useless and confusing. Just write ",(0,n.kt)("inlineCode",{parentName:"p"},"8")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"9")," instead."),(0,n.kt)("h3",{id:"no-octal-escape"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-octal-escape"},(0,n.kt)("inlineCode",{parentName:"a"},"no-octal-escape"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ts(1487): Octal escape sequences are not allowed. Use the syntax '\\x3f'."))))),(0,n.kt)("p",null,"Do not use octal escapes in string literals. They are deprecated and are syntax errors in strict mode. Use ",(0,n.kt)("inlineCode",{parentName:"p"},"\\x")," or ",(0,n.kt)("inlineCode",{parentName:"p"},"\\u")," instead."),(0,n.kt)("h3",{id:"no-script-url"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-script-url"},(0,n.kt)("inlineCode",{parentName:"a"},"no-script-url"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,"Do not use ",(0,n.kt)("inlineCode",{parentName:"p"},"javascript:")," URLs. They are a form of ",(0,n.kt)("inlineCode",{parentName:"p"},"eval"),"."),(0,n.kt)("h3",{id:"no-template-curly-in-string"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-template-curly-in-string"},(0,n.kt)("inlineCode",{parentName:"a"},"no-template-curly-in-string"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: warning Usually, using the ",(0,n.kt)("inlineCode",{parentName:"li"},"${}")," syntax in a string literal is a mistake. However, it's not a deadly error, so we only set it to warning.")),(0,n.kt)("h3",{id:"no-useless-concat"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-concat"},(0,n.kt)("inlineCode",{parentName:"a"},"no-useless-concat"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,'Do not use string concatenation when you can just use a single string literal. You should generally not use string concatenation to make a "multi-line string" either\u2014just make the string literal as long as you want.'),(0,n.kt)("h3",{id:"no-useless-escape"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-escape"},(0,n.kt)("inlineCode",{parentName:"a"},"no-useless-escape"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,"Do not use ",(0,n.kt)("inlineCode",{parentName:"p"},"\\")," to escape characters that do not need escaping. It's confusing and unnecessary. In regexes, these identity escapes cause syntax errors in Unicode mode (which is required)."),(0,n.kt)("h3",{id:"prefer-template"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-template"},(0,n.kt)("inlineCode",{parentName:"a"},"prefer-template"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,"Use template literals instead of string concatenation. It's more readable and less error-prone. Use it ",(0,n.kt)("em",{parentName:"p"},"everywhere")," \u2014 never use ",(0,n.kt)("inlineCode",{parentName:"p"},"+")," for string concatenation. This includes ",(0,n.kt)("inlineCode",{parentName:"p"},"str1 + str2"),", which should be written as ",(0,n.kt)("inlineCode",{parentName:"p"},"`${str1}${str2}`"),"."),(0,n.kt)("h2",{id:"regular-expressions"},"Regular expressions"),(0,n.kt)("h3",{id:"prefer-concise-syntax"},"Prefer concise syntax"),(0,n.kt)("p",null,"There are many ways to represent the same regular expression. Instead of this:"),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"rule"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," test:"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}}," /"),(0,n.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\."),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"(?:js"),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"ts"),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"jsx"),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"tsx)/"),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"i"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"};"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"rule"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," test:"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}}," /"),(0,n.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\."),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"(?:js"),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"ts"),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"jsx"),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"tsx)/"),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"i"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")))))),(0,n.kt)("p",null,"Prefer this:"),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"rule"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," test:"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}}," /"),(0,n.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\."),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"[jt]"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"sx"),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"?"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"i"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"};"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"rule"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," test:"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}}," /"),(0,n.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\."),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"[jt]"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"sx"),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"?"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"i"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")))))),(0,n.kt)("p",null,"Regular expressions are ",(0,n.kt)("em",{parentName:"p"},"not")," intended to be readable; they are designed for machine consumption. Convey the intent of a regular expression through test cases, not through making it verbose. Related to ",(0,n.kt)("strong",{parentName:"p"},"code for the average-intelligent"),"."),(0,n.kt)("h3",{id:"no-control-regex"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-control-regex"},(0,n.kt)("inlineCode",{parentName:"a"},"no-control-regex"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: warning"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"regexp/no-control-character"))))),(0,n.kt)("p",null,"Control characters are rarely used in regular expressions because they are rarely present in string literals at all. It's only set to warning so you should not fear disabling the rule where needed."),(0,n.kt)("h3",{id:"no-div-regex"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-div-regex"},(0,n.kt)("inlineCode",{parentName:"a"},"no-div-regex"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: off")),(0,n.kt)("p",null,"This is an extremely weird rule that forbids ",(0,n.kt)("inlineCode",{parentName:"p"},"=")," at the immediate beginning of a regex. We believe that the chance of one confusing ",(0,n.kt)("inlineCode",{parentName:"p"},"/=")," with ",(0,n.kt)("inlineCode",{parentName:"p"},"/=/")," is sparse, and most places have good syntax highlighting to distinguish them."),(0,n.kt)("h3",{id:"no-empty-character-class"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-empty-character-class"},(0,n.kt)("inlineCode",{parentName:"a"},"no-empty-character-class"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"regexp/no-empty-character-class"))))),(0,n.kt)("p",null,"Empty character classes cause the regex to never match."),(0,n.kt)("h3",{id:"no-invalid-regexp"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-invalid-regexp"},(0,n.kt)("inlineCode",{parentName:"a"},"no-invalid-regexp"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"regexp/no-invalid-regexp"))))),(0,n.kt)("p",null,"Write valid regular expressions. The only case where you might want to add a disable comment is when you are using novel syntax not supported by ESLint."),(0,n.kt)("h3",{id:"no-misleading-character-class"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-misleading-character-class"},(0,n.kt)("inlineCode",{parentName:"a"},"no-misleading-character-class"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"regexp/no-misleading-unicode-character"))))),(0,n.kt)("p",null,"Do not write character classes that contain grapheme clusters or astral characters in general. Common ways to fix this are:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Change character class to a disjunction"),(0,n.kt)("li",{parentName:"ul"},"Use the ",(0,n.kt)("inlineCode",{parentName:"li"},"u")," flag, if you want to use astral characters"),(0,n.kt)("li",{parentName:"ul"},"Use ",(0,n.kt)("inlineCode",{parentName:"li"},"\\q{}")," and the ",(0,n.kt)("inlineCode",{parentName:"li"},"v")," flag, if you want to use grapheme clusters")),(0,n.kt)("h3",{id:"no-regex-spaces"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-regex-spaces"},(0,n.kt)("inlineCode",{parentName:"a"},"no-regex-spaces"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: off"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"regexp/prefer-quantifier"))))),(0,n.kt)("p",null,"Although we want to use concise syntax, multiple spaces in a regex is often useful to resemble constructs that readers are familiar with."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Matches a well-formatted table row")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"match"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," tableRow."),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"match"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,n.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\|"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}}," Column "),(0,n.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\|"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}}," Another one "),(0,n.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\|"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},");"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Matches a well-formatted table row")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"match"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," tableRow."),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"match"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,n.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\|"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}}," Column "),(0,n.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\|"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}}," Another one "),(0,n.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\|"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")))))),(0,n.kt)("h3",{id:"no-useless-backreference"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-backreference"},(0,n.kt)("inlineCode",{parentName:"a"},"no-useless-backreference"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"regexp/no-useless-backreference"))))),(0,n.kt)("p",null,"Do not write backreferences that always resolve to the empty string."),(0,n.kt)("h3",{id:"prefer-named-capture-group"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-named-capture-group"},(0,n.kt)("inlineCode",{parentName:"a"},"prefer-named-capture-group"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: warning"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"regexp/prefer-named-capture-group"))))),(0,n.kt)("p",null,"Named capture groups allow us to semantically identify each group. It also warns about those groups that should probably be explicitly marked as non-capturing groups."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"rule"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Is this capturing group actually useful? If I remove it, would it break")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// consumer code?")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," test:"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}}," /"),(0,n.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\."),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"(jpe"),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"?"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"g"),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"png"),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"webp)/"),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"i"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"};"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"rule"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Is this capturing group actually useful? If I remove it, would it break")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// consumer code?")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," test:"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}}," /"),(0,n.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\."),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"(jpe"),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"?"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"g"),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"png"),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"webp)/"),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"i"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")))))),(0,n.kt)("p",null,"Ultimately, this makes refactor less risky because addition of a capturing group does not shift the other indices."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"diff"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#82071E"}},"- const commitPattern = /(.+),(.+)/;")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#116329"}},"+ const commitPattern = /(.+),(.+),(\\d+)/;")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"const date = commit.match(commitPattern)?.[1];")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"// Oops, I need to also change `[1]` to `[2]`..."))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"diff"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FFA198"}},"- const commitPattern = /(.+),(.+)/;")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"+ const commitPattern = /(.+),(.+),(\\d+)/;")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"const date = commit.match(commitPattern)?.[1];")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"// Oops, I need to also change `[1]` to `[2]`...")))))),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Named capture groups isn't strongly typed in TypeScript. See ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/microsoft/TypeScript/issues/32098"},"microsoft/TypeScript#32098"),". If you access ",(0,n.kt)("inlineCode",{parentName:"p"},"match.groups.someName"),", you will get ",(0,n.kt)("inlineCode",{parentName:"p"},"| undefined")," under ",(0,n.kt)("inlineCode",{parentName:"p"},"noUncheckedIndexAccess"),", even when ",(0,n.kt)("inlineCode",{parentName:"p"},"someName")," always exists. In this case, prefer using a non-null assertion to convey developer intent.")),(0,n.kt)("h3",{id:"prefer-regex-literals"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-regex-literals"},(0,n.kt)("inlineCode",{parentName:"a"},"prefer-regex-literals"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Configuration:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Do not allow using ",(0,n.kt)("inlineCode",{parentName:"li"},"RegExp")," on a regex literal (",(0,n.kt)("inlineCode",{parentName:"li"},"disallowRedundantWrapping: true"),")")))),(0,n.kt)("p",null,"Only use the ",(0,n.kt)("inlineCode",{parentName:"p"},"RegExp")," constructor when either the source or the flags is dynamic. Otherwise, use a regex literal. This applies to regex literals with a lot of escaping, too."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Don't write:")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"RegExp"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"https://jc-verse.github.io/js-style-guide/eslint-base/literals"'),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Write:")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"/https:"),(0,n.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\/\\/"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"jc-verse"),(0,n.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\."),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"github"),(0,n.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\."),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"io"),(0,n.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\/"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"js-style-guide"),(0,n.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\/"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"eslint-base"),(0,n.kt)("span",{parentName:"div",style:{color:"#116329"}},"\\/"),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"literals/"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},";"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Don't write:")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"RegExp"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"https://jc-verse.github.io/js-style-guide/eslint-base/literals"'),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Write:")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/https:"),(0,n.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\/\\/"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"jc-verse"),(0,n.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\."),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"github"),(0,n.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\."),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"io"),(0,n.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\/"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"js-style-guide"),(0,n.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\/"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"eslint-base"),(0,n.kt)("span",{parentName:"div",style:{color:"#7EE787"}},"\\/"),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"literals/"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")))))),(0,n.kt)("h3",{id:"require-unicode-regexp"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/require-unicode-regexp"},(0,n.kt)("inlineCode",{parentName:"a"},"require-unicode-regexp"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"regexp/require-unicode-regexp"))))),(0,n.kt)("p",null,"Always use the ",(0,n.kt)("inlineCode",{parentName:"p"},"u")," or ",(0,n.kt)("inlineCode",{parentName:"p"},"v")," flag. This does not just enable additional features; it also disables legacy features, like strict mode for regexes. See ",(0,n.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features#regexp"},"deprecated regex features"),"."),(0,n.kt)("h2",{id:"symbols"},"Symbols"),(0,n.kt)("h3",{id:"symbol-description"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/symbol-description"},(0,n.kt)("inlineCode",{parentName:"a"},"symbol-description"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,"Always provide a description for symbols. This is useful for debugging."))}m.isMDXComponent=!0},5318:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>N});var r=a(7378);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function s(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var i=r.createContext({}),p=function(e){var t=r.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},k=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,l=e.originalType,i=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),d=p(a),k=n,N=d["".concat(i,".").concat(k)]||d[k]||m[k]||l;return a?r.createElement(N,s(s({ref:t},c),{},{components:a})):r.createElement(N,s({ref:t},c))}));function N(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=a.length,s=new Array(l);s[0]=k;var o={};for(var i in t)hasOwnProperty.call(t,i)&&(o[i]=t[i]);o.originalType=e,o[d]="string"==typeof e?e:n,s[1]=o;for(var p=2;p{r.d(a,{xA:()=>y,yg:()=>m});var n=r(3696);function t(e,a,r){return a in e?Object.defineProperty(e,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[a]=r,e}function l(e,a){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var a=1;a=0||(t[r]=e[r]);return t}(e,a);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(t[r]=e[r])}return t}var i=n.createContext({}),p=function(e){var a=n.useContext(i),r=a;return e&&(r="function"==typeof e?e(a):s(s({},a),e)),r},y=function(e){var a=p(e.components);return n.createElement(i.Provider,{value:a},e.children)},c="mdxType",g={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var r=e.components,t=e.mdxType,l=e.originalType,i=e.parentName,y=o(e,["components","mdxType","originalType","parentName"]),c=p(r),d=t,m=c["".concat(i,".").concat(d)]||c[d]||g[d]||l;return r?n.createElement(m,s(s({ref:a},y),{},{components:r})):n.createElement(m,s({ref:a},y))}));function m(e,a){var r=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var l=r.length,s=new Array(l);s[0]=d;var o={};for(var i in a)hasOwnProperty.call(a,i)&&(o[i]=a[i]);o.originalType=e,o[c]="string"==typeof e?e:t,s[1]=o;for(var p=2;p{r.r(a),r.d(a,{assets:()=>i,contentTitle:()=>s,default:()=>g,frontMatter:()=>l,metadata:()=>o,toc:()=>p});var n=r(8102),t=(r(3696),r(9916));const l={sidebar_position:2},s="Literals",o={unversionedId:"eslint-base/literals",id:"eslint-base/literals",title:"Literals",description:"This page discusses styles for number, string, and regex literals, as well as template/symbol expressions.",source:"@site/../docs/eslint-base/literals.md",sourceDirName:"eslint-base",slug:"/eslint-base/literals",permalink:"/js-style-guide/eslint-base/literals",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"defaultSidebar",previous:{title:"General formatting",permalink:"/js-style-guide/eslint-base/formatting"},next:{title:"Variables & names",permalink:"/js-style-guide/eslint-base/variables-names"}},i={},p=[{value:"Number literals",id:"number-literals",level:2},{value:"no-loss-of-precision",id:"no-loss-of-precision",level:3},{value:"no-magic-numbers",id:"no-magic-numbers",level:3},{value:"no-octal",id:"no-octal",level:3},{value:"prefer-numeric-literals",id:"prefer-numeric-literals",level:3},{value:"radix",id:"radix",level:3},{value:"String literals",id:"string-literals",level:2},{value:"no-multi-str",id:"no-multi-str",level:3},{value:"no-nonoctal-decimal-escape",id:"no-nonoctal-decimal-escape",level:3},{value:"no-octal-escape",id:"no-octal-escape",level:3},{value:"no-script-url",id:"no-script-url",level:3},{value:"no-template-curly-in-string",id:"no-template-curly-in-string",level:3},{value:"no-useless-concat",id:"no-useless-concat",level:3},{value:"no-useless-escape",id:"no-useless-escape",level:3},{value:"prefer-template",id:"prefer-template",level:3},{value:"Regular expressions",id:"regular-expressions",level:2},{value:"Prefer concise syntax",id:"prefer-concise-syntax",level:3},{value:"no-control-regex",id:"no-control-regex",level:3},{value:"no-div-regex",id:"no-div-regex",level:3},{value:"no-empty-character-class",id:"no-empty-character-class",level:3},{value:"no-invalid-regexp",id:"no-invalid-regexp",level:3},{value:"no-misleading-character-class",id:"no-misleading-character-class",level:3},{value:"no-regex-spaces",id:"no-regex-spaces",level:3},{value:"no-useless-backreference",id:"no-useless-backreference",level:3},{value:"prefer-named-capture-group",id:"prefer-named-capture-group",level:3},{value:"prefer-regex-literals",id:"prefer-regex-literals",level:3},{value:"require-unicode-regexp",id:"require-unicode-regexp",level:3},{value:"Symbols",id:"symbols",level:2},{value:"symbol-description",id:"symbol-description",level:3}],y={toc:p},c="wrapper";function g(e){let{components:a,...r}=e;return(0,t.yg)(c,(0,n.A)({},y,r,{components:a,mdxType:"MDXLayout"}),(0,t.yg)("h1",{id:"literals"},"Literals"),(0,t.yg)("p",null,"This page discusses styles for number, string, and regex literals, as well as template/symbol expressions."),(0,t.yg)("h2",{id:"number-literals"},"Number literals"),(0,t.yg)("h3",{id:"no-loss-of-precision"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-loss-of-precision"},(0,t.yg)("inlineCode",{parentName:"a"},"no-loss-of-precision"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Do not use numbers literals that don't represent what they look like. For example, ",(0,t.yg)("inlineCode",{parentName:"p"},"5123000000000000000000000000001")," does not represent that number. Note that this rule works automatically with literal types."),(0,t.yg)("h3",{id:"no-magic-numbers"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-magic-numbers"},(0,t.yg)("inlineCode",{parentName:"a"},"no-magic-numbers"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: off")),(0,t.yg)("p",null,"You are free to use numbers as you see fit."),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"for"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"let"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," i "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"0"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; i "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"<"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," groups."),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"length"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; i "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"+="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"x"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," groups[i];")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"y"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," groups[i "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"+"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"];")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"for"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"let"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," i "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"0"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; i "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"<"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," groups."),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"length"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; i "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"+="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"x"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," groups[i];")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"y"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," groups[i "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"+"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"];")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,t.yg)("p",null,"Use comments if the numbers are not self-explanatory."),(0,t.yg)("h3",{id:"no-octal"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-octal"},(0,t.yg)("inlineCode",{parentName:"a"},"no-octal"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"ts(1489): Decimals with leading zeros are not allowed."))))),(0,t.yg)("p",null,"Do not use legacy octal literals (",(0,t.yg)("inlineCode",{parentName:"p"},"011"),"). They are deprecated and are syntax errors in strict mode. Use ",(0,t.yg)("inlineCode",{parentName:"p"},"0o")," instead."),(0,t.yg)("h3",{id:"prefer-numeric-literals"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-numeric-literals"},(0,t.yg)("inlineCode",{parentName:"a"},"prefer-numeric-literals"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Use ",(0,t.yg)("inlineCode",{parentName:"p"},"0b")," and ",(0,t.yg)("inlineCode",{parentName:"p"},"0o")," number literals instead of ",(0,t.yg)("inlineCode",{parentName:"p"},"parseInt")," with a static string."),(0,t.yg)("h3",{id:"radix"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/radix"},(0,t.yg)("inlineCode",{parentName:"a"},"radix"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Configuration:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Always require a radix (",(0,t.yg)("inlineCode",{parentName:"li"},'"always"'),")")))),(0,t.yg)("p",null,"You should always use ",(0,t.yg)("inlineCode",{parentName:"p"},"parseInt")," with a radix. This prevents accidental behavior inconsistencies when the string starts with ",(0,t.yg)("inlineCode",{parentName:"p"},"0")," or ",(0,t.yg)("inlineCode",{parentName:"p"},"0x"),". If you intentionally want to accommodate many number formats, use the ",(0,t.yg)("inlineCode",{parentName:"p"},"Number")," constructor instead."),(0,t.yg)("h2",{id:"string-literals"},"String literals"),(0,t.yg)("h3",{id:"no-multi-str"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-multi-str"},(0,t.yg)("inlineCode",{parentName:"a"},"no-multi-str"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Do not use ",(0,t.yg)("inlineCode",{parentName:"p"},"\\")," to split strings across multiple lines\u2014it doesn't work well with indentation. Write string literals that are as long as you want."),(0,t.yg)("h3",{id:"no-nonoctal-decimal-escape"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-nonoctal-decimal-escape"},(0,t.yg)("inlineCode",{parentName:"a"},"no-nonoctal-decimal-escape"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Do not use ",(0,t.yg)("inlineCode",{parentName:"p"},"\\8")," and ",(0,t.yg)("inlineCode",{parentName:"p"},"\\9")," in string literals because they are useless and confusing. Just write ",(0,t.yg)("inlineCode",{parentName:"p"},"8")," and ",(0,t.yg)("inlineCode",{parentName:"p"},"9")," instead."),(0,t.yg)("h3",{id:"no-octal-escape"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-octal-escape"},(0,t.yg)("inlineCode",{parentName:"a"},"no-octal-escape"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"ts(1487): Octal escape sequences are not allowed. Use the syntax '\\x3f'."))))),(0,t.yg)("p",null,"Do not use octal escapes in string literals. They are deprecated and are syntax errors in strict mode. Use ",(0,t.yg)("inlineCode",{parentName:"p"},"\\x")," or ",(0,t.yg)("inlineCode",{parentName:"p"},"\\u")," instead."),(0,t.yg)("h3",{id:"no-script-url"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-script-url"},(0,t.yg)("inlineCode",{parentName:"a"},"no-script-url"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Do not use ",(0,t.yg)("inlineCode",{parentName:"p"},"javascript:")," URLs. They are a form of ",(0,t.yg)("inlineCode",{parentName:"p"},"eval"),"."),(0,t.yg)("h3",{id:"no-template-curly-in-string"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-template-curly-in-string"},(0,t.yg)("inlineCode",{parentName:"a"},"no-template-curly-in-string"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: warning Usually, using the ",(0,t.yg)("inlineCode",{parentName:"li"},"${}")," syntax in a string literal is a mistake. However, it's not a deadly error, so we only set it to warning.")),(0,t.yg)("h3",{id:"no-useless-concat"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-concat"},(0,t.yg)("inlineCode",{parentName:"a"},"no-useless-concat"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,'Do not use string concatenation when you can just use a single string literal. You should generally not use string concatenation to make a "multi-line string" either\u2014just make the string literal as long as you want.'),(0,t.yg)("h3",{id:"no-useless-escape"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-escape"},(0,t.yg)("inlineCode",{parentName:"a"},"no-useless-escape"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Do not use ",(0,t.yg)("inlineCode",{parentName:"p"},"\\")," to escape characters that do not need escaping. It's confusing and unnecessary. In regexes, these identity escapes cause syntax errors in Unicode mode (which is required)."),(0,t.yg)("h3",{id:"prefer-template"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-template"},(0,t.yg)("inlineCode",{parentName:"a"},"prefer-template"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Use template literals instead of string concatenation. It's more readable and less error-prone. Use it ",(0,t.yg)("em",{parentName:"p"},"everywhere")," \u2014 never use ",(0,t.yg)("inlineCode",{parentName:"p"},"+")," for string concatenation. This includes ",(0,t.yg)("inlineCode",{parentName:"p"},"str1 + str2"),", which should be written as ",(0,t.yg)("inlineCode",{parentName:"p"},"`${str1}${str2}`"),"."),(0,t.yg)("h2",{id:"regular-expressions"},"Regular expressions"),(0,t.yg)("h3",{id:"prefer-concise-syntax"},"Prefer concise syntax"),(0,t.yg)("p",null,"There are many ways to represent the same regular expression. Instead of this:"),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"rule"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," test:"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}}," /"),(0,t.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\."),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"(?:js"),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"ts"),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"jsx"),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"tsx)/"),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"i"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"};"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"rule"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," test:"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}}," /"),(0,t.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\."),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"(?:js"),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"ts"),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"jsx"),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"tsx)/"),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"i"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")))))),(0,t.yg)("p",null,"Prefer this:"),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"rule"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," test:"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}}," /"),(0,t.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\."),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"[jt]"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"sx"),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"?"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"i"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"};"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"rule"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," test:"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}}," /"),(0,t.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\."),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"[jt]"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"sx"),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"?"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"i"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")))))),(0,t.yg)("p",null,"Regular expressions are ",(0,t.yg)("em",{parentName:"p"},"not")," intended to be readable; they are designed for machine consumption. Convey the intent of a regular expression through test cases, not through making it verbose. Related to ",(0,t.yg)("strong",{parentName:"p"},"code for the average-intelligent"),"."),(0,t.yg)("h3",{id:"no-control-regex"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-control-regex"},(0,t.yg)("inlineCode",{parentName:"a"},"no-control-regex"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: warning"),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"regexp/no-control-character"))))),(0,t.yg)("p",null,"Control characters are rarely used in regular expressions because they are rarely present in string literals at all. It's only set to warning so you should not fear disabling the rule where needed."),(0,t.yg)("h3",{id:"no-div-regex"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-div-regex"},(0,t.yg)("inlineCode",{parentName:"a"},"no-div-regex"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: off")),(0,t.yg)("p",null,"This is an extremely weird rule that forbids ",(0,t.yg)("inlineCode",{parentName:"p"},"=")," at the immediate beginning of a regex. We believe that the chance of one confusing ",(0,t.yg)("inlineCode",{parentName:"p"},"/=")," with ",(0,t.yg)("inlineCode",{parentName:"p"},"/=/")," is sparse, and most places have good syntax highlighting to distinguish them."),(0,t.yg)("h3",{id:"no-empty-character-class"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-empty-character-class"},(0,t.yg)("inlineCode",{parentName:"a"},"no-empty-character-class"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"regexp/no-empty-character-class"))))),(0,t.yg)("p",null,"Empty character classes cause the regex to never match."),(0,t.yg)("h3",{id:"no-invalid-regexp"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-invalid-regexp"},(0,t.yg)("inlineCode",{parentName:"a"},"no-invalid-regexp"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"regexp/no-invalid-regexp"))))),(0,t.yg)("p",null,"Write valid regular expressions. The only case where you might want to add a disable comment is when you are using novel syntax not supported by ESLint."),(0,t.yg)("h3",{id:"no-misleading-character-class"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-misleading-character-class"},(0,t.yg)("inlineCode",{parentName:"a"},"no-misleading-character-class"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"regexp/no-misleading-unicode-character"))))),(0,t.yg)("p",null,"Do not write character classes that contain grapheme clusters or astral characters in general. Common ways to fix this are:"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Change character class to a disjunction"),(0,t.yg)("li",{parentName:"ul"},"Use the ",(0,t.yg)("inlineCode",{parentName:"li"},"u")," flag, if you want to use astral characters"),(0,t.yg)("li",{parentName:"ul"},"Use ",(0,t.yg)("inlineCode",{parentName:"li"},"\\q{}")," and the ",(0,t.yg)("inlineCode",{parentName:"li"},"v")," flag, if you want to use grapheme clusters")),(0,t.yg)("h3",{id:"no-regex-spaces"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-regex-spaces"},(0,t.yg)("inlineCode",{parentName:"a"},"no-regex-spaces"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: off"),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"regexp/prefer-quantifier"))))),(0,t.yg)("p",null,"Although we want to use concise syntax, multiple spaces in a regex is often useful to resemble constructs that readers are familiar with."),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Matches a well-formatted table row")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"match"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," tableRow."),(0,t.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"match"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,t.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\|"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}}," Column "),(0,t.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\|"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}}," Another one "),(0,t.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\|"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"/"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},");"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Matches a well-formatted table row")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"match"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," tableRow."),(0,t.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"match"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,t.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\|"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}}," Column "),(0,t.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\|"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}}," Another one "),(0,t.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\|"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")))))),(0,t.yg)("h3",{id:"no-useless-backreference"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-backreference"},(0,t.yg)("inlineCode",{parentName:"a"},"no-useless-backreference"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"regexp/no-useless-backreference"))))),(0,t.yg)("p",null,"Do not write backreferences that always resolve to the empty string."),(0,t.yg)("h3",{id:"prefer-named-capture-group"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-named-capture-group"},(0,t.yg)("inlineCode",{parentName:"a"},"prefer-named-capture-group"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: warning"),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"regexp/prefer-named-capture-group"))))),(0,t.yg)("p",null,"Named capture groups allow us to semantically identify each group. It also warns about those groups that should probably be explicitly marked as non-capturing groups."),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"rule"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Is this capturing group actually useful? If I remove it, would it break")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// consumer code?")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," test:"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}}," /"),(0,t.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\."),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"(jpe"),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"?"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"g"),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"png"),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"|"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"webp)/"),(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"i"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"};"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"rule"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Is this capturing group actually useful? If I remove it, would it break")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// consumer code?")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," test:"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}}," /"),(0,t.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\."),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"(jpe"),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"?"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"g"),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"png"),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"|"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"webp)/"),(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"i"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")))))),(0,t.yg)("p",null,"Ultimately, this makes refactor less risky because addition of a capturing group does not shift the other indices."),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"diff"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#82071E"}},"- const commitPattern = /(.+),(.+)/;")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#116329"}},"+ const commitPattern = /(.+),(.+),(\\d+)/;")),(0,t.yg)("div",{parentName:"code",className:"line"}),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"const date = commit.match(commitPattern)?.[1];")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"// Oops, I need to also change `[1]` to `[2]`..."))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"diff"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FFA198"}},"- const commitPattern = /(.+),(.+)/;")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"+ const commitPattern = /(.+),(.+),(\\d+)/;")),(0,t.yg)("div",{parentName:"code",className:"line"}),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"const date = commit.match(commitPattern)?.[1];")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"// Oops, I need to also change `[1]` to `[2]`...")))))),(0,t.yg)("admonition",{type:"note"},(0,t.yg)("p",{parentName:"admonition"},"Named capture groups isn't strongly typed in TypeScript. See ",(0,t.yg)("a",{parentName:"p",href:"https://github.com/microsoft/TypeScript/issues/32098"},"microsoft/TypeScript#32098"),". If you access ",(0,t.yg)("inlineCode",{parentName:"p"},"match.groups.someName"),", you will get ",(0,t.yg)("inlineCode",{parentName:"p"},"| undefined")," under ",(0,t.yg)("inlineCode",{parentName:"p"},"noUncheckedIndexAccess"),", even when ",(0,t.yg)("inlineCode",{parentName:"p"},"someName")," always exists. In this case, prefer using a non-null assertion to convey developer intent.")),(0,t.yg)("h3",{id:"prefer-regex-literals"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-regex-literals"},(0,t.yg)("inlineCode",{parentName:"a"},"prefer-regex-literals"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Configuration:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Do not allow using ",(0,t.yg)("inlineCode",{parentName:"li"},"RegExp")," on a regex literal (",(0,t.yg)("inlineCode",{parentName:"li"},"disallowRedundantWrapping: true"),")")))),(0,t.yg)("p",null,"Only use the ",(0,t.yg)("inlineCode",{parentName:"p"},"RegExp")," constructor when either the source or the flags is dynamic. Otherwise, use a regex literal. This applies to regex literals with a lot of escaping, too."),(0,t.yg)("div",{className:"shiki-twoslash-fragment"},(0,t.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Don't write:")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"RegExp"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"https://jc-verse.github.io/js-style-guide/eslint-base/literals"'),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,t.yg)("div",{parentName:"code",className:"line"}),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Write:")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"/https:"),(0,t.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\/\\/"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"jc-verse"),(0,t.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\."),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"github"),(0,t.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\."),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"io"),(0,t.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\/"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"js-style-guide"),(0,t.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\/"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"eslint-base"),(0,t.yg)("span",{parentName:"div",style:{color:"#116329"}},"\\/"),(0,t.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"literals/"),(0,t.yg)("span",{parentName:"div",style:{color:"#24292F"}},";"))))),(0,t.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,t.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,t.yg)("div",{parentName:"pre",className:"code-container"},(0,t.yg)("code",{parentName:"div"},(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Don't write:")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,t.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"RegExp"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"https://jc-verse.github.io/js-style-guide/eslint-base/literals"'),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,t.yg)("div",{parentName:"code",className:"line"}),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Write:")),(0,t.yg)("div",{parentName:"code",className:"line"},(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"/https:"),(0,t.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\/\\/"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"jc-verse"),(0,t.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\."),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"github"),(0,t.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\."),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"io"),(0,t.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\/"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"js-style-guide"),(0,t.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\/"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"eslint-base"),(0,t.yg)("span",{parentName:"div",style:{color:"#7EE787"}},"\\/"),(0,t.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"literals/"),(0,t.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")))))),(0,t.yg)("h3",{id:"require-unicode-regexp"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/require-unicode-regexp"},(0,t.yg)("inlineCode",{parentName:"a"},"require-unicode-regexp"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error"),(0,t.yg)("li",{parentName:"ul"},"Related:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"regexp/require-unicode-regexp"))))),(0,t.yg)("p",null,"Always use the ",(0,t.yg)("inlineCode",{parentName:"p"},"u")," or ",(0,t.yg)("inlineCode",{parentName:"p"},"v")," flag. This does not just enable additional features; it also disables legacy features, like strict mode for regexes. See ",(0,t.yg)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features#regexp"},"deprecated regex features"),"."),(0,t.yg)("h2",{id:"symbols"},"Symbols"),(0,t.yg)("h3",{id:"symbol-description"},(0,t.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/symbol-description"},(0,t.yg)("inlineCode",{parentName:"a"},"symbol-description"))),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Severity: error")),(0,t.yg)("p",null,"Always provide a description for symbols. This is useful for debugging."))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/edaa7221.ba780c1b.js b/assets/js/edaa7221.ba780c1b.js new file mode 100644 index 0000000..6bb9646 --- /dev/null +++ b/assets/js/edaa7221.ba780c1b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[582],{9916:(e,a,s)=>{s.d(a,{xA:()=>i,yg:()=>g});var n=s(3696);function r(e,a,s){return a in e?Object.defineProperty(e,a,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[a]=s,e}function t(e,a){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),s.push.apply(s,n)}return s}function o(e){for(var a=1;a=0||(r[s]=e[s]);return r}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(r[s]=e[s])}return r}var p=n.createContext({}),y=function(e){var a=n.useContext(p),s=a;return e&&(s="function"==typeof e?e(a):o(o({},a),e)),s},i=function(e){var a=y(e.components);return n.createElement(p.Provider,{value:a},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},m=n.forwardRef((function(e,a){var s=e.components,r=e.mdxType,t=e.originalType,p=e.parentName,i=l(e,["components","mdxType","originalType","parentName"]),c=y(s),m=r,g=c["".concat(p,".").concat(m)]||c[m]||d[m]||t;return s?n.createElement(g,o(o({ref:a},i),{},{components:s})):n.createElement(g,o({ref:a},i))}));function g(e,a){var s=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var t=s.length,o=new Array(t);o[0]=m;var l={};for(var p in a)hasOwnProperty.call(a,p)&&(l[p]=a[p]);l.originalType=e,l[c]="string"==typeof e?e:r,o[1]=l;for(var y=2;y{s.r(a),s.d(a,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>t,metadata:()=>l,toc:()=>y});var n=s(8102),r=(s(3696),s(9916));const t={sidebar_position:7},o="Objects & classes",l={unversionedId:"eslint-base/objects-classes",id:"eslint-base/objects-classes",title:"Objects & classes",description:"This page introduces rules related to declaring objects and classes. It does not discuss about using them.",source:"@site/../docs/eslint-base/objects-classes.md",sourceDirName:"eslint-base",slug:"/eslint-base/objects-classes",permalink:"/js-style-guide/eslint-base/objects-classes",draft:!1,tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7},sidebar:"defaultSidebar",previous:{title:"Functions",permalink:"/js-style-guide/eslint-base/functions"},next:{title:"Collections",permalink:"/js-style-guide/eslint-base/collections"}},p={},y=[{value:"General",id:"general",level:2},{value:"max-classes-per-file",id:"max-classes-per-file",level:3},{value:"no-class-assign",id:"no-class-assign",level:3},{value:"object-shorthand",id:"object-shorthand",level:3},{value:"prefer-object-spread",id:"prefer-object-spread",level:3},{value:"Constructors",id:"constructors",level:2},{value:"constructor-super",id:"constructor-super",level:3},{value:"no-constructor-return",id:"no-constructor-return",level:3},{value:"no-this-before-super",id:"no-this-before-super",level:3},{value:"no-useless-constructor",id:"no-useless-constructor",level:3},{value:"Members",id:"members",level:2},{value:"no-dupe-class-members",id:"no-dupe-class-members",level:3},{value:"no-dupe-keys",id:"no-dupe-keys",level:3},{value:"no-unused-private-class-members",id:"no-unused-private-class-members",level:3},{value:"no-useless-computed-key",id:"no-useless-computed-key",level:3},{value:"Methods",id:"methods",level:2},{value:"class-methods-use-this",id:"class-methods-use-this",level:3},{value:"Accessors",id:"accessors",level:2},{value:"accessor-pairs",id:"accessor-pairs",level:3},{value:"getter-return",id:"getter-return",level:3},{value:"grouped-accessor-pairs",id:"grouped-accessor-pairs",level:3},{value:"no-setter-return",id:"no-setter-return",level:3},{value:"Other class elements",id:"other-class-elements",level:2},{value:"no-empty-static-block",id:"no-empty-static-block",level:3},{value:"Inheritance",id:"inheritance",level:2},{value:"no-extend-native",id:"no-extend-native",level:3},{value:"Subclassing built-ins",id:"subclassing-built-ins",level:3}],i={toc:y},c="wrapper";function d(e){let{components:a,...s}=e;return(0,r.yg)(c,(0,n.A)({},i,s,{components:a,mdxType:"MDXLayout"}),(0,r.yg)("h1",{id:"objects--classes"},"Objects & classes"),(0,r.yg)("p",null,"This page introduces rules related to declaring objects and classes. It does not discuss about ",(0,r.yg)("em",{parentName:"p"},"using")," them."),(0,r.yg)("h2",{id:"general"},"General"),(0,r.yg)("h3",{id:"max-classes-per-file"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-classes-per-file"},(0,r.yg)("inlineCode",{parentName:"a"},"max-classes-per-file"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"Unlike languages like Java where one-class-per-file is mandated, classes in JS are a very granular unit of data and doesn't represent the entire module. Constraining the number of classes doesn't make sense in JS."),(0,r.yg)("h3",{id:"no-class-assign"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-class-assign"},(0,r.yg)("inlineCode",{parentName:"a"},"no-class-assign"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(2629): Cannot assign to 'A' because it is a class."))))),(0,r.yg)("p",null,'Under no circumstance should you be reassigning a binding introduced by a declaration\u2014this makes the variable\'s type hard to reason about. Class declarations are already immutable inside the declaration, so it should be immutable outside too. One niche case where reassignment is intended is for "decorators":'),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"Foo"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {}")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"Foo "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"decorate"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(Foo);"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"Foo"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {}")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"Foo "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"decorate"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(Foo);")))))),(0,r.yg)("p",null,"But you should use actual decorators instead."),(0,r.yg)("h3",{id:"object-shorthand"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/object-shorthand"},(0,r.yg)("inlineCode",{parentName:"a"},"object-shorthand"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Require all shorthands (",(0,r.yg)("inlineCode",{parentName:"li"},'"always"'),")"),(0,r.yg)("li",{parentName:"ul"},"Avoid arrow functions that use explicit ",(0,r.yg)("inlineCode",{parentName:"li"},"return")," (",(0,r.yg)("inlineCode",{parentName:"li"},"avoidExplicitReturnArrows: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Use shorthand even when the property requires quotes (",(0,r.yg)("inlineCode",{parentName:"li"},"avoidQuotes: false"),")"),(0,r.yg)("li",{parentName:"ul"},'Do not ignore "constructors" (',(0,r.yg)("inlineCode",{parentName:"li"},"ignoreConstructors: false"),")")))),(0,r.yg)("p",null,"Use object shorthands (",(0,r.yg)("inlineCode",{parentName:"p"},"{ a }")," instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"{ a: a }"),") whenever possible. Also use methods instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"function")," expressions. You should also use methods instead of arrow functions, unless the latter results in shorter code (see also ",(0,r.yg)("inlineCode",{parentName:"p"},"func-style"),"), i.e. when you can use concise arrow body."),(0,r.yg)("p",null,"If for some reason you need to declare a constructor in an object literal:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"obj"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"SomeClass"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," () {},")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"};"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"obj"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"SomeClass"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," () {},")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")))))),(0,r.yg)("p",null,"Consider either using a class declaration or a class expression instead."),(0,r.yg)("h3",{id:"prefer-object-spread"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-object-spread"},(0,r.yg)("inlineCode",{parentName:"a"},"prefer-object-spread"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Use object spread (",(0,r.yg)("inlineCode",{parentName:"p"},"{ ...a }"),") instead of ",(0,r.yg)("inlineCode",{parentName:"p"},"Object.assign({}, ...)"),"."),(0,r.yg)("h2",{id:"constructors"},"Constructors"),(0,r.yg)("h3",{id:"constructor-super"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/constructor-super"},(0,r.yg)("inlineCode",{parentName:"a"},"constructor-super"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(2335): 'super' can only be referenced in a derived class.")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(2377): Constructors for derived classes must contain a 'super' call.")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(17009): 'super' must be called before accessing 'this' in the constructor of a derived class."))))),(0,r.yg)("p",null,"It's a runtime error if an extended class doesn't call ",(0,r.yg)("inlineCode",{parentName:"p"},"super()")," or if a base class calls ",(0,r.yg)("inlineCode",{parentName:"p"},"super()"),"."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Base"},"Base")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-err",{parentName:"span"},"super")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(); "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> SyntaxError: 'super' keyword unexpected here")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"'super' can only be referenced in a derived class."),(0,r.yg)("span",{parentName:"span",className:"code"},"2335")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"'super' can only be referenced in a derived class."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Extended"},"Extended")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"extends"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Base"},"Base")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) Extended.b: number"},"b")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"Constructors for derived classes must contain a 'super' call."),(0,r.yg)("span",{parentName:"span",className:"code"},"2377")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"Constructors for derived classes must contain a 'super' call."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-err",{parentName:"span"},"this")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) Extended.b: number"},"b")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,r.yg)("span",{parentName:"span",className:"code"},"17009")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Base"},"Base")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-err",{parentName:"span"},"super")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(); "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> SyntaxError: 'super' keyword unexpected here")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"'super' can only be referenced in a derived class."),(0,r.yg)("span",{parentName:"span",className:"code"},"2335")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"'super' can only be referenced in a derived class."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Extended"},"Extended")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"extends"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Base"},"Base")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) Extended.b: number"},"b")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"Constructors for derived classes must contain a 'super' call."),(0,r.yg)("span",{parentName:"span",className:"code"},"2377")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"Constructors for derived classes must contain a 'super' call."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-err",{parentName:"span"},"this")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) Extended.b: number"},"b")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,r.yg)("span",{parentName:"span",className:"code"},"17009")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("p",null,"Note that the error can also be prevented by returning an object from the constructor."),(0,r.yg)("h3",{id:"no-constructor-return"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-constructor-return"},(0,r.yg)("inlineCode",{parentName:"a"},"no-constructor-return"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Constructors' return values are useless. You can't call it as a normal method, after all."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"foo"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"()."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(); "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> TypeError: Class constructor A cannot be invoked without 'new'"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"foo"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"()."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(); "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> TypeError: Class constructor A cannot be invoked without 'new'")))))),(0,r.yg)("p",null,"If you return an object from the constructor, it will replace the ",(0,r.yg)("inlineCode",{parentName:"p"},"this")," value and become the result of the ",(0,r.yg)("inlineCode",{parentName:"p"},"new")," expression. This is very rarely what you want, because it usually breaks the semantics that ",(0,r.yg)("inlineCode",{parentName:"p"},"new A instanceof A"),". In the case where this is intended, use a disable comment."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {};")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"console."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(a "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"instanceof"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"); "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> false"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {};")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"console."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(a "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"instanceof"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"); "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> false")))))),(0,r.yg)("h3",{id:"no-this-before-super"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-this-before-super"},(0,r.yg)("inlineCode",{parentName:"a"},"no-this-before-super"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(17009): 'super' must be called before accessing 'this' in the constructor of a derived class."))))),(0,r.yg)("p",null,"You cannot access ",(0,r.yg)("inlineCode",{parentName:"p"},"this")," before calling ",(0,r.yg)("inlineCode",{parentName:"p"},"super()")," in a constructor. This results in a runtime error. There are some edge cases, such as when the ",(0,r.yg)("inlineCode",{parentName:"p"},"super()")," call is contained in a closure. Consider whether you actually need to do this."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const wrappedCall: (fn: () => void) => void"},"wrappedCall")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) fn: () => void"},"fn")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," () "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"void"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) fn: () => void"},"fn")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class A"},"A")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"extends"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var Object: ObjectConstructor"},"Object")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"Constructors for derived classes must contain a 'super' call."),(0,r.yg)("span",{parentName:"span",className:"code"},"2377")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"Constructors for derived classes must contain a 'super' call."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const wrappedCall: (fn: () => void) => void"},"wrappedCall")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(() "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-err",{parentName:"span"},"super")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"Super calls are not permitted outside constructors or in nested functions inside constructors."),(0,r.yg)("span",{parentName:"span",className:"code"},"2337")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"Super calls are not permitted outside constructors or in nested functions inside constructors."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," });")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-err",{parentName:"span"},"this")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,r.yg)("span",{parentName:"span",className:"code"},"17009")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"constructor A(): A"},"A")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(); "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Works in JS, but linters are unhappy"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const wrappedCall: (fn: () => void) => void"},"wrappedCall")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) fn: () => void"},"fn")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," () "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"void"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) fn: () => void"},"fn")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class A"},"A")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"extends"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var Object: ObjectConstructor"},"Object")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"Constructors for derived classes must contain a 'super' call."),(0,r.yg)("span",{parentName:"span",className:"code"},"2377")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"Constructors for derived classes must contain a 'super' call."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const wrappedCall: (fn: () => void) => void"},"wrappedCall")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(() "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-err",{parentName:"span"},"super")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"Super calls are not permitted outside constructors or in nested functions inside constructors."),(0,r.yg)("span",{parentName:"span",className:"code"},"2337")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"Super calls are not permitted outside constructors or in nested functions inside constructors."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," });")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-err",{parentName:"span"},"this")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,r.yg)("span",{parentName:"span",className:"code"},"17009")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"constructor A(): A"},"A")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(); "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Works in JS, but linters are unhappy")))))),(0,r.yg)("h3",{id:"no-useless-constructor"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-constructor"},(0,r.yg)("inlineCode",{parentName:"a"},"no-useless-constructor"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Do not write constructors that are empty or only call ",(0,r.yg)("inlineCode",{parentName:"p"},"super()"),". Such constructors can be omitted. Even in TypeScript, we prefer to not change the constructor's visibility, or use parameter properties, so generally there shouldn't be many false positives."),(0,r.yg)("h2",{id:"members"},"Members"),(0,r.yg)("h3",{id:"no-dupe-class-members"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-dupe-class-members"},(0,r.yg)("inlineCode",{parentName:"a"},"no-dupe-class-members"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/js-style-guide/typescript/base#no-dupe-class-members"},(0,r.yg)("inlineCode",{parentName:"a"},"@typescript-eslint/no-dupe-class-members"))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(2300): Duplicate identifier 'a'.")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(2393): Duplicate function implementation."))))),(0,r.yg)("p",null,"Duplicate class members overwrite each other and is likely a mistake. In TypeScript, you will want to use the extension rule in order to allow overloads."),(0,r.yg)("h3",{id:"no-dupe-keys"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-dupe-keys"},(0,r.yg)("inlineCode",{parentName:"a"},"no-dupe-keys"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(1117): An object literal cannot have multiple properties with the same name."))))),(0,r.yg)("p",null,"Duplicate keys in object literals overwrite each other and is likely a mistake. If you have some side effects that are hard to manage, consider evaluating all the side effects before creating the object literal."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"js"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"obj"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," a: "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomething"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(),")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," b: "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomethingElse"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(),")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," a: "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doAnotherThing"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(),")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"};"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"js"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"obj"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a: "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomething"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(),")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," b: "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomethingElse"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(),")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a: "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doAnotherThing"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(),")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")))))),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomething"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"b"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomethingElse"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"doAnotherThing"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"obj"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," { a, b };"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomething"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"b"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomethingElse"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doAnotherThing"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"obj"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { a, b };")))))),(0,r.yg)("h3",{id:"no-unused-private-class-members"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unused-private-class-members"},(0,r.yg)("inlineCode",{parentName:"a"},"no-unused-private-class-members"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(6133): '#a' is declared but its value is never read."))))),(0,r.yg)("p",null,"Unused private members are like unused local variables. They cannot be accessed from anywhere else."),(0,r.yg)("h3",{id:"no-useless-computed-key"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-computed-key"},(0,r.yg)("inlineCode",{parentName:"a"},"no-useless-computed-key"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Check class members too (",(0,r.yg)("inlineCode",{parentName:"li"},"enforceForClassMembers: true"),")")))),(0,r.yg)("p",null,"Don't use computed keys when the expression is a literal. An exception (also special cased by the rule) is when the key is ",(0,r.yg)("inlineCode",{parentName:"p"},"__proto__"),", because ",(0,r.yg)("inlineCode",{parentName:"p"},"{ __proto__: x }")," is not the same as ",(0,r.yg)("inlineCode",{parentName:"p"},'{ ["__proto__"]: x }'),"."),(0,r.yg)("h2",{id:"methods"},"Methods"),(0,r.yg)("h3",{id:"class-methods-use-this"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/class-methods-use-this"},(0,r.yg)("inlineCode",{parentName:"a"},"class-methods-use-this"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"Unlike other languages like Java where every instance contains the static methods, static methods only exist on the class itself in JavaScript. This means it should rather be up to the developer to decide whether it should be a static or instance method, since there can be semantic differences."),(0,r.yg)("p",null,"Often, a method that doesn't use ",(0,r.yg)("inlineCode",{parentName:"p"},"this")," is used as a base implementation that requires overriding. Or, it's interacting with an external runtime system. (For example, ",(0,r.yg)("inlineCode",{parentName:"p"},"React.Component"),"'s ",(0,r.yg)("inlineCode",{parentName:"p"},"render()")," method.) This rule is turned off both because of the number of false-positives (where instance methods are necessary) and because of the semantic differences."),(0,r.yg)("h2",{id:"accessors"},"Accessors"),(0,r.yg)("h3",{id:"accessor-pairs"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/accessor-pairs"},(0,r.yg)("inlineCode",{parentName:"a"},"accessor-pairs"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Check class members in addition to object definitions (",(0,r.yg)("inlineCode",{parentName:"li"},"enforceForClassMembers: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Report getters without setters (",(0,r.yg)("inlineCode",{parentName:"li"},"getWithoutSet: true"),")"),(0,r.yg)("li",{parentName:"ul"},"Report setters without getters (",(0,r.yg)("inlineCode",{parentName:"li"},"setWithoutGet: true"),")"))),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(2540): Cannot assign to 'X' because it is a read-only property."))))),(0,r.yg)("p",null,"Accessors must be symmetrical. In non-strict mode, a getter without setter doesn't forbid setting the variable, but the re-assignment is silently ignored. In strict mode, it throws an error whose message cannot be customized."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"get"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(getter) Foo.bar: number"},"bar")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,r.yg)("data-err",{parentName:"span"},(0,r.yg)("data-lsp",{parentName:"data-err",lsp:"(property) Foo.bar: any"},"bar"))," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> In non-strict mode, it succeeds without any warning!")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"Cannot assign to 'bar' because it is a read-only property."),(0,r.yg)("span",{parentName:"span",className:"code"},"2540")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"Cannot assign to 'bar' because it is a read-only property."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar"),"); "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> 1"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"get"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(getter) Foo.bar: number"},"bar")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,r.yg)("data-err",{parentName:"span"},(0,r.yg)("data-lsp",{parentName:"data-err",lsp:"(property) Foo.bar: any"},"bar"))," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> In non-strict mode, it succeeds without any warning!")),(0,r.yg)("span",{parentName:"code",className:"error"},(0,r.yg)("span",{parentName:"span"},"Cannot assign to 'bar' because it is a read-only property."),(0,r.yg)("span",{parentName:"span",className:"code"},"2540")),(0,r.yg)("span",{parentName:"code",className:"error-behind"},"Cannot assign to 'bar' because it is a read-only property."),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar"),"); "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> 1")))))),(0,r.yg)("p",null,"To create read-only members, define a setter that throws an error."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"get"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(getter) Foo.bar: number"},"bar")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"set"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(setter) Foo.bar: number"},"bar")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) value: number"},"value")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"throw"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var Error: ErrorConstructor\nnew (message?: string | undefined) => Error"},"Error")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"\"'bar' is readonly\""),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> Throws error"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"get"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(getter) Foo.bar: number"},"bar")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"set"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(setter) Foo.bar: number"},"bar")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) value: number"},"value")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"throw"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"var Error: ErrorConstructor\nnew (message?: string | undefined) => Error"},"Error")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"\"'bar' is readonly\""),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> Throws error")))))),(0,r.yg)("p",null,"TypeScript will also report attempts to assign to a read-only member that doesn't have a setter, so in a TypeScript project, you may want to override ",(0,r.yg)("inlineCode",{parentName:"p"},"getWithoutSet")," to ",(0,r.yg)("inlineCode",{parentName:"p"},"false"),"."),(0,r.yg)("p",null,"A setter without getter violates the basic expectations of member-accessing. More importantly, TypeScript will not warn about such case, and the property access returns ",(0,r.yg)("inlineCode",{parentName:"p"},"undefined"),"."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"#privateBar"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"set"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(setter) Foo.bar: number"},"bar")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},".#privateBar "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val"),";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar"),"); "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> undefined"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"#privateBar"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"set"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(setter) Foo.bar: number"},"bar")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".#privateBar "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val"),";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar")," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar"),"); "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> undefined")))))),(0,r.yg)("p",null,"If a setter's sole purpose is to induce side-effects on internal state, use a method instead."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"#privateBar"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Foo.setBar(val: number): void"},"setBar")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val")),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},".#privateBar "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val"),";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Foo.setBar(val: number): void"},"setBar")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},");"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"#privateBar"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Foo.setBar(val: number): void"},"setBar")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val")),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".#privateBar "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val"),";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Foo.setBar(val: number): void"},"setBar")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")))))),(0,r.yg)("h3",{id:"getter-return"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/getter-return"},(0,r.yg)("inlineCode",{parentName:"a"},"getter-return"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Configuration:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Do not allow implicitly returning ",(0,r.yg)("inlineCode",{parentName:"li"},"undefined")," (",(0,r.yg)("inlineCode",{parentName:"li"},"allowImplicit: false"),")"))),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(2378): A 'get' accessor must return a value."))))),(0,r.yg)("p",null,"A getter must explicitly return a value. Otherwise, TypeScript will give a weird type of ",(0,r.yg)("inlineCode",{parentName:"p"},"void"),"."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"get"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(getter) Foo.bar: void"},"bar")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: void"},"bar"),"); "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},'// Type is "void"?'))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"get"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(getter) Foo.bar: void"},"bar")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,r.yg)("div",{parentName:"code",className:"line"},"\xa0"),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,r.yg)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,r.yg)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,r.yg)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: void"},"bar"),"); "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},'// Type is "void"?')))))),(0,r.yg)("h3",{id:"grouped-accessor-pairs"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/grouped-accessor-pairs"},(0,r.yg)("inlineCode",{parentName:"a"},"grouped-accessor-pairs"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: off")),(0,r.yg)("p",null,"We do not enforce that accessors appear in pairs, because it's also common to have all getters in one place and setters in another. Since we mandate symmetric getters and setters, we aren't worried about the absence of the other."),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"Foo"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"#a"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"#b"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Getters")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"get"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},".#a;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"get"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"b"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},".#a;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"// Setters")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"set"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"val"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},".#a "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," val;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"set"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8250DF"}},"b"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#953800"}},"val"),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},".#b "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," val;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"Foo"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"#a"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"#b"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Getters")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"get"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".#a;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"get"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"b"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".#a;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"// Setters")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"set"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"a"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"val"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".#a "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," val;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"set"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#D2A8FF"}},"b"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,r.yg)("span",{parentName:"div",style:{color:"#FFA657"}},"val"),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},".#b "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," val;")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,r.yg)("h3",{id:"no-setter-return"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-setter-return"},(0,r.yg)("inlineCode",{parentName:"a"},"no-setter-return"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error"),(0,r.yg)("li",{parentName:"ul"},"Related:",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"ts(2408): Setters cannot return a value."))))),(0,r.yg)("p",null,"The return values of setters are ignored and are likely a mistake."),(0,r.yg)("h2",{id:"other-class-elements"},"Other class elements"),(0,r.yg)("h3",{id:"no-empty-static-block"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-empty-static-block"},(0,r.yg)("inlineCode",{parentName:"a"},"no-empty-static-block"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Empty static blocks are useless and are a sign of refactoring artifacts."),(0,r.yg)("h2",{id:"inheritance"},"Inheritance"),(0,r.yg)("h3",{id:"no-extend-native"},(0,r.yg)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-extend-native"},(0,r.yg)("inlineCode",{parentName:"a"},"no-extend-native"))),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Severity: error")),(0,r.yg)("p",null,"Do not monkeypatch native prototypes. There are too many examples of this causing problems. If you want to polyfill, use a library. Otherwise, use a utility function."),(0,r.yg)("p",null,"You should generally avoid modifying the prototype of any object, including your own classes. If you want to add a method to a class, use inheritance."),(0,r.yg)("h3",{id:"subclassing-built-ins"},"Subclassing built-ins"),(0,r.yg)("p",null,"In short: don't. I'd love it if we are able to, but we live in a world where TC39 is actively messing up our experience, so to prevent more pain, use composition instead. Read ",(0,r.yg)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/extends#subclassing_built-ins"},"subclassing built-ins")," (written by me) for more information."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/edaa7221.c16708a9.js b/assets/js/edaa7221.c16708a9.js deleted file mode 100644 index ec0ef50..0000000 --- a/assets/js/edaa7221.c16708a9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[348],{9075:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>o,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>i});var s=t(2685),n=(t(7378),t(5318));const r={sidebar_position:7},o="Objects & classes",l={unversionedId:"eslint-base/objects-classes",id:"eslint-base/objects-classes",title:"Objects & classes",description:"This page introduces rules related to declaring objects and classes. It does not discuss about using them.",source:"@site/../docs/eslint-base/objects-classes.md",sourceDirName:"eslint-base",slug:"/eslint-base/objects-classes",permalink:"/js-style-guide/eslint-base/objects-classes",draft:!1,tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7},sidebar:"defaultSidebar",previous:{title:"Functions",permalink:"/js-style-guide/eslint-base/functions"},next:{title:"Collections",permalink:"/js-style-guide/eslint-base/collections"}},p={},i=[{value:"General",id:"general",level:2},{value:"max-classes-per-file",id:"max-classes-per-file",level:3},{value:"no-class-assign",id:"no-class-assign",level:3},{value:"object-shorthand",id:"object-shorthand",level:3},{value:"prefer-object-spread",id:"prefer-object-spread",level:3},{value:"Constructors",id:"constructors",level:2},{value:"constructor-super",id:"constructor-super",level:3},{value:"no-constructor-return",id:"no-constructor-return",level:3},{value:"no-this-before-super",id:"no-this-before-super",level:3},{value:"no-useless-constructor",id:"no-useless-constructor",level:3},{value:"Members",id:"members",level:2},{value:"no-dupe-class-members",id:"no-dupe-class-members",level:3},{value:"no-dupe-keys",id:"no-dupe-keys",level:3},{value:"no-unused-private-class-members",id:"no-unused-private-class-members",level:3},{value:"no-useless-computed-key",id:"no-useless-computed-key",level:3},{value:"Methods",id:"methods",level:2},{value:"class-methods-use-this",id:"class-methods-use-this",level:3},{value:"Accessors",id:"accessors",level:2},{value:"accessor-pairs",id:"accessor-pairs",level:3},{value:"getter-return",id:"getter-return",level:3},{value:"grouped-accessor-pairs",id:"grouped-accessor-pairs",level:3},{value:"no-setter-return",id:"no-setter-return",level:3},{value:"Other class elements",id:"other-class-elements",level:2},{value:"no-empty-static-block",id:"no-empty-static-block",level:3},{value:"Inheritance",id:"inheritance",level:2},{value:"no-extend-native",id:"no-extend-native",level:3},{value:"Subclassing built-ins",id:"subclassing-built-ins",level:3}],c={toc:i},d="wrapper";function m(e){let{components:a,...t}=e;return(0,n.kt)(d,(0,s.Z)({},c,t,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"objects--classes"},"Objects & classes"),(0,n.kt)("p",null,"This page introduces rules related to declaring objects and classes. It does not discuss about ",(0,n.kt)("em",{parentName:"p"},"using")," them."),(0,n.kt)("h2",{id:"general"},"General"),(0,n.kt)("h3",{id:"max-classes-per-file"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/max-classes-per-file"},(0,n.kt)("inlineCode",{parentName:"a"},"max-classes-per-file"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: off")),(0,n.kt)("p",null,"Unlike languages like Java where one-class-per-file is mandated, classes in JS are a very granular unit of data and doesn't represent the entire module. Constraining the number of classes doesn't make sense in JS."),(0,n.kt)("h3",{id:"no-class-assign"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-class-assign"},(0,n.kt)("inlineCode",{parentName:"a"},"no-class-assign"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ts(2629): Cannot assign to 'A' because it is a class."))))),(0,n.kt)("p",null,'Under no circumstance should you be reassigning a binding introduced by a declaration\u2014this makes the variable\'s type hard to reason about. Class declarations are already immutable inside the declaration, so it should be immutable outside too. One niche case where reassignment is intended is for "decorators":'),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},"Foo"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {}")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"Foo "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"decorate"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(Foo);"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"Foo"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {}")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"Foo "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"decorate"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(Foo);")))))),(0,n.kt)("p",null,"But you should use actual decorators instead."),(0,n.kt)("h3",{id:"object-shorthand"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/object-shorthand"},(0,n.kt)("inlineCode",{parentName:"a"},"object-shorthand"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Configuration:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Require all shorthands (",(0,n.kt)("inlineCode",{parentName:"li"},'"always"'),")"),(0,n.kt)("li",{parentName:"ul"},"Avoid arrow functions that use explicit ",(0,n.kt)("inlineCode",{parentName:"li"},"return")," (",(0,n.kt)("inlineCode",{parentName:"li"},"avoidExplicitReturnArrows: true"),")"),(0,n.kt)("li",{parentName:"ul"},"Use shorthand even when the property requires quotes (",(0,n.kt)("inlineCode",{parentName:"li"},"avoidQuotes: false"),")"),(0,n.kt)("li",{parentName:"ul"},'Do not ignore "constructors" (',(0,n.kt)("inlineCode",{parentName:"li"},"ignoreConstructors: false"),")")))),(0,n.kt)("p",null,"Use object shorthands (",(0,n.kt)("inlineCode",{parentName:"p"},"{ a }")," instead of ",(0,n.kt)("inlineCode",{parentName:"p"},"{ a: a }"),") whenever possible. Also use methods instead of ",(0,n.kt)("inlineCode",{parentName:"p"},"function")," expressions. You should also use methods instead of arrow functions, unless the latter results in shorter code (see also ",(0,n.kt)("inlineCode",{parentName:"p"},"func-style"),"), i.e. when you can use concise arrow body."),(0,n.kt)("p",null,"If for some reason you need to declare a constructor in an object literal:"),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"obj"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"SomeClass"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"function"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," () {},")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"};"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"obj"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"SomeClass"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"function"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," () {},")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")))))),(0,n.kt)("p",null,"Consider either using a class declaration or a class expression instead."),(0,n.kt)("h3",{id:"prefer-object-spread"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/prefer-object-spread"},(0,n.kt)("inlineCode",{parentName:"a"},"prefer-object-spread"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,"Use object spread (",(0,n.kt)("inlineCode",{parentName:"p"},"{ ...a }"),") instead of ",(0,n.kt)("inlineCode",{parentName:"p"},"Object.assign({}, ...)"),"."),(0,n.kt)("h2",{id:"constructors"},"Constructors"),(0,n.kt)("h3",{id:"constructor-super"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/constructor-super"},(0,n.kt)("inlineCode",{parentName:"a"},"constructor-super"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ts(2335): 'super' can only be referenced in a derived class.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ts(2377): Constructors for derived classes must contain a 'super' call.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ts(17009): 'super' must be called before accessing 'this' in the constructor of a derived class."))))),(0,n.kt)("p",null,"It's a runtime error if an extended class doesn't call ",(0,n.kt)("inlineCode",{parentName:"p"},"super()")," or if a base class calls ",(0,n.kt)("inlineCode",{parentName:"p"},"super()"),"."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Base"},"Base")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,n.kt)("data-err",{parentName:"span"},"super")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(); "),(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> SyntaxError: 'super' keyword unexpected here")),(0,n.kt)("span",{parentName:"code",className:"error"},(0,n.kt)("span",{parentName:"span"},"'super' can only be referenced in a derived class."),(0,n.kt)("span",{parentName:"span",className:"code"},"2335")),(0,n.kt)("span",{parentName:"code",className:"error-behind"},"'super' can only be referenced in a derived class."),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Extended"},"Extended")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"extends"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Base"},"Base")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(property) Extended.b: number"},"b")),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,n.kt)("span",{parentName:"code",className:"error"},(0,n.kt)("span",{parentName:"span"},"Constructors for derived classes must contain a 'super' call."),(0,n.kt)("span",{parentName:"span",className:"code"},"2377")),(0,n.kt)("span",{parentName:"code",className:"error-behind"},"Constructors for derived classes must contain a 'super' call."),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,n.kt)("data-err",{parentName:"span"},"this")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},".",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(property) Extended.b: number"},"b")," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor")),(0,n.kt)("span",{parentName:"code",className:"error"},(0,n.kt)("span",{parentName:"span"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,n.kt)("span",{parentName:"span",className:"code"},"17009")),(0,n.kt)("span",{parentName:"code",className:"error-behind"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Base"},"Base")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,n.kt)("data-err",{parentName:"span"},"super")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(); "),(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> SyntaxError: 'super' keyword unexpected here")),(0,n.kt)("span",{parentName:"code",className:"error"},(0,n.kt)("span",{parentName:"span"},"'super' can only be referenced in a derived class."),(0,n.kt)("span",{parentName:"span",className:"code"},"2335")),(0,n.kt)("span",{parentName:"code",className:"error-behind"},"'super' can only be referenced in a derived class."),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Extended"},"Extended")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"extends"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Base"},"Base")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(property) Extended.b: number"},"b")),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,n.kt)("span",{parentName:"code",className:"error"},(0,n.kt)("span",{parentName:"span"},"Constructors for derived classes must contain a 'super' call."),(0,n.kt)("span",{parentName:"span",className:"code"},"2377")),(0,n.kt)("span",{parentName:"code",className:"error-behind"},"Constructors for derived classes must contain a 'super' call."),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,n.kt)("data-err",{parentName:"span"},"this")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(property) Extended.b: number"},"b")," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor")),(0,n.kt)("span",{parentName:"code",className:"error"},(0,n.kt)("span",{parentName:"span"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,n.kt)("span",{parentName:"span",className:"code"},"17009")),(0,n.kt)("span",{parentName:"code",className:"error-behind"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,n.kt)("p",null,"Note that the error can also be prevented by returning an object from the constructor."),(0,n.kt)("h3",{id:"no-constructor-return"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-constructor-return"},(0,n.kt)("inlineCode",{parentName:"a"},"no-constructor-return"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,"Constructors' return values are useless. You can't call it as a normal method, after all."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"foo"'),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"a"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"A"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"()."),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"constructor"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(); "),(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> TypeError: Class constructor A cannot be invoked without 'new'"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"foo"'),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"a"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"A"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"()."),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"constructor"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(); "),(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> TypeError: Class constructor A cannot be invoked without 'new'")))))),(0,n.kt)("p",null,"If you return an object from the constructor, it will replace the ",(0,n.kt)("inlineCode",{parentName:"p"},"this")," value and become the result of the ",(0,n.kt)("inlineCode",{parentName:"p"},"new")," expression. This is very rarely what you want, because it usually breaks the semantics that ",(0,n.kt)("inlineCode",{parentName:"p"},"new A instanceof A"),". In the case where this is intended, use a disable comment."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {};")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"a"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"A"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"console."),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"log"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(a "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"instanceof"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},"A"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"); "),(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> false"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {};")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"a"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"A"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"console."),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"log"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(a "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"instanceof"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"A"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"); "),(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> false")))))),(0,n.kt)("h3",{id:"no-this-before-super"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-this-before-super"},(0,n.kt)("inlineCode",{parentName:"a"},"no-this-before-super"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ts(17009): 'super' must be called before accessing 'this' in the constructor of a derived class."))))),(0,n.kt)("p",null,"You cannot access ",(0,n.kt)("inlineCode",{parentName:"p"},"this")," before calling ",(0,n.kt)("inlineCode",{parentName:"p"},"super()")," in a constructor. This results in a runtime error. There are some edge cases, such as when the ",(0,n.kt)("inlineCode",{parentName:"p"},"super()")," call is contained in a closure. Consider whether you actually need to do this."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const wrappedCall: (fn: () => void) => void"},"wrappedCall")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ("),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(parameter) fn: () => void"},"fn")),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," () "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"void"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},") "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(parameter) fn: () => void"},"fn")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class A"},"A")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"extends"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"var Object: ObjectConstructor"},"Object")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"constructor"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,n.kt)("span",{parentName:"code",className:"error"},(0,n.kt)("span",{parentName:"span"},"Constructors for derived classes must contain a 'super' call."),(0,n.kt)("span",{parentName:"span",className:"code"},"2377")),(0,n.kt)("span",{parentName:"code",className:"error-behind"},"Constructors for derived classes must contain a 'super' call."),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const wrappedCall: (fn: () => void) => void"},"wrappedCall")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(() "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"=>"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,n.kt)("data-err",{parentName:"span"},"super")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,n.kt)("span",{parentName:"code",className:"error"},(0,n.kt)("span",{parentName:"span"},"Super calls are not permitted outside constructors or in nested functions inside constructors."),(0,n.kt)("span",{parentName:"span",className:"code"},"2337")),(0,n.kt)("span",{parentName:"code",className:"error-behind"},"Super calls are not permitted outside constructors or in nested functions inside constructors."),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," });")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,n.kt)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,n.kt)("data-err",{parentName:"span"},"this")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,n.kt)("span",{parentName:"code",className:"error"},(0,n.kt)("span",{parentName:"span"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,n.kt)("span",{parentName:"span",className:"code"},"17009")),(0,n.kt)("span",{parentName:"code",className:"error-behind"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"constructor A(): A"},"A")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(); "),(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Works in JS, but linters are unhappy"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const wrappedCall: (fn: () => void) => void"},"wrappedCall")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ("),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(parameter) fn: () => void"},"fn")),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," () "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"void"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(parameter) fn: () => void"},"fn")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class A"},"A")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"extends"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"var Object: ObjectConstructor"},"Object")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"constructor"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,n.kt)("span",{parentName:"code",className:"error"},(0,n.kt)("span",{parentName:"span"},"Constructors for derived classes must contain a 'super' call."),(0,n.kt)("span",{parentName:"span",className:"code"},"2377")),(0,n.kt)("span",{parentName:"code",className:"error-behind"},"Constructors for derived classes must contain a 'super' call."),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const wrappedCall: (fn: () => void) => void"},"wrappedCall")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(() "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"=>"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,n.kt)("data-err",{parentName:"span"},"super")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,n.kt)("span",{parentName:"code",className:"error"},(0,n.kt)("span",{parentName:"span"},"Super calls are not permitted outside constructors or in nested functions inside constructors."),(0,n.kt)("span",{parentName:"span",className:"code"},"2337")),(0,n.kt)("span",{parentName:"code",className:"error-behind"},"Super calls are not permitted outside constructors or in nested functions inside constructors."),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," });")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,n.kt)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,n.kt)("data-err",{parentName:"span"},"this")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,n.kt)("span",{parentName:"code",className:"error"},(0,n.kt)("span",{parentName:"span"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,n.kt)("span",{parentName:"span",className:"code"},"17009")),(0,n.kt)("span",{parentName:"code",className:"error-behind"},"'super' must be called before accessing 'this' in the constructor of a derived class."),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"constructor A(): A"},"A")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(); "),(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Works in JS, but linters are unhappy")))))),(0,n.kt)("h3",{id:"no-useless-constructor"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-constructor"},(0,n.kt)("inlineCode",{parentName:"a"},"no-useless-constructor"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,"Do not write constructors that are empty or only call ",(0,n.kt)("inlineCode",{parentName:"p"},"super()"),". Such constructors can be omitted. Even in TypeScript, we prefer to not change the constructor's visibility, or use parameter properties, so generally there shouldn't be many false positives."),(0,n.kt)("h2",{id:"members"},"Members"),(0,n.kt)("h3",{id:"no-dupe-class-members"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-dupe-class-members"},(0,n.kt)("inlineCode",{parentName:"a"},"no-dupe-class-members"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"/js-style-guide/typescript/base#no-dupe-class-members"},(0,n.kt)("inlineCode",{parentName:"a"},"@typescript-eslint/no-dupe-class-members"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ts(2300): Duplicate identifier 'a'.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ts(2393): Duplicate function implementation."))))),(0,n.kt)("p",null,"Duplicate class members overwrite each other and is likely a mistake. In TypeScript, you will want to use the extension rule in order to allow overloads."),(0,n.kt)("h3",{id:"no-dupe-keys"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-dupe-keys"},(0,n.kt)("inlineCode",{parentName:"a"},"no-dupe-keys"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ts(1117): An object literal cannot have multiple properties with the same name."))))),(0,n.kt)("p",null,"Duplicate keys in object literals overwrite each other and is likely a mistake. If you have some side effects that are hard to manage, consider evaluating all the side effects before creating the object literal."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"js"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"obj"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," a: "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomething"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(),")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," b: "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomethingElse"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(),")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," a: "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doAnotherThing"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(),")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"};"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"js"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"obj"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a: "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomething"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(),")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," b: "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomethingElse"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(),")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," a: "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doAnotherThing"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(),")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")))))),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomething"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"b"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doSomethingElse"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"a"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"doAnotherThing"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"obj"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," { a, b };"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomething"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"b"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doSomethingElse"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"a"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"doAnotherThing"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"obj"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { a, b };")))))),(0,n.kt)("h3",{id:"no-unused-private-class-members"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-unused-private-class-members"},(0,n.kt)("inlineCode",{parentName:"a"},"no-unused-private-class-members"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ts(6133): '#a' is declared but its value is never read."))))),(0,n.kt)("p",null,"Unused private members are like unused local variables. They cannot be accessed from anywhere else."),(0,n.kt)("h3",{id:"no-useless-computed-key"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-useless-computed-key"},(0,n.kt)("inlineCode",{parentName:"a"},"no-useless-computed-key"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Configuration:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Check class members too (",(0,n.kt)("inlineCode",{parentName:"li"},"enforceForClassMembers: true"),")")))),(0,n.kt)("p",null,"Don't use computed keys when the expression is a literal. An exception (also special cased by the rule) is when the key is ",(0,n.kt)("inlineCode",{parentName:"p"},"__proto__"),", because ",(0,n.kt)("inlineCode",{parentName:"p"},"{ __proto__: x }")," is not the same as ",(0,n.kt)("inlineCode",{parentName:"p"},'{ ["__proto__"]: x }'),"."),(0,n.kt)("h2",{id:"methods"},"Methods"),(0,n.kt)("h3",{id:"class-methods-use-this"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/class-methods-use-this"},(0,n.kt)("inlineCode",{parentName:"a"},"class-methods-use-this"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: off")),(0,n.kt)("p",null,"Unlike other languages like Java where every instance contains the static methods, static methods only exist on the class itself in JavaScript. This means it should rather be up to the developer to decide whether it should be a static or instance method, since there can be semantic differences."),(0,n.kt)("p",null,"Often, a method that doesn't use ",(0,n.kt)("inlineCode",{parentName:"p"},"this")," is used as a base implementation that requires overriding. Or, it's interacting with an external runtime system. (For example, ",(0,n.kt)("inlineCode",{parentName:"p"},"React.Component"),"'s ",(0,n.kt)("inlineCode",{parentName:"p"},"render()")," method.) This rule is turned off both because of the number of false-positives (where instance methods are necessary) and because of the semantic differences."),(0,n.kt)("h2",{id:"accessors"},"Accessors"),(0,n.kt)("h3",{id:"accessor-pairs"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/accessor-pairs"},(0,n.kt)("inlineCode",{parentName:"a"},"accessor-pairs"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Configuration:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Check class members in addition to object definitions (",(0,n.kt)("inlineCode",{parentName:"li"},"enforceForClassMembers: true"),")"),(0,n.kt)("li",{parentName:"ul"},"Report getters without setters (",(0,n.kt)("inlineCode",{parentName:"li"},"getWithoutSet: true"),")"),(0,n.kt)("li",{parentName:"ul"},"Report setters without getters (",(0,n.kt)("inlineCode",{parentName:"li"},"setWithoutGet: true"),")"))),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ts(2540): Cannot assign to 'X' because it is a read-only property."))))),(0,n.kt)("p",null,"Accessors must be symmetrical. In non-strict mode, a getter without setter doesn't forbid setting the variable, but the re-assignment is silently ignored. In strict mode, it throws an error whose message cannot be customized."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"get"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(getter) Foo.bar: number"},"bar")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,n.kt)("data-err",{parentName:"span"},(0,n.kt)("data-lsp",{parentName:"data-err",lsp:"(property) Foo.bar: any"},"bar"))," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> In non-strict mode, it succeeds without any warning!")),(0,n.kt)("span",{parentName:"code",className:"error"},(0,n.kt)("span",{parentName:"span"},"Cannot assign to 'bar' because it is a read-only property."),(0,n.kt)("span",{parentName:"span",className:"code"},"2540")),(0,n.kt)("span",{parentName:"code",className:"error-behind"},"Cannot assign to 'bar' because it is a read-only property."),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar"),"); "),(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> 1"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"get"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(getter) Foo.bar: number"},"bar")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,n.kt)("data-err",{parentName:"span"},(0,n.kt)("data-lsp",{parentName:"data-err",lsp:"(property) Foo.bar: any"},"bar"))," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> In non-strict mode, it succeeds without any warning!")),(0,n.kt)("span",{parentName:"code",className:"error"},(0,n.kt)("span",{parentName:"span"},"Cannot assign to 'bar' because it is a read-only property."),(0,n.kt)("span",{parentName:"span",className:"code"},"2540")),(0,n.kt)("span",{parentName:"code",className:"error-behind"},"Cannot assign to 'bar' because it is a read-only property."),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar"),"); "),(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> 1")))))),(0,n.kt)("p",null,"To create read-only members, define a setter that throws an error."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"get"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(getter) Foo.bar: number"},"bar")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"set"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(setter) Foo.bar: number"},"bar")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(parameter) value: number"},"value")),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"throw"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"var Error: ErrorConstructor\nnew (message?: string | undefined) => Error"},"Error")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"\"'bar' is readonly\""),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},");")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar")," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"; "),(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> Throws error"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"get"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(getter) Foo.bar: number"},"bar")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"set"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(setter) Foo.bar: number"},"bar")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(parameter) value: number"},"value")),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"throw"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"var Error: ErrorConstructor\nnew (message?: string | undefined) => Error"},"Error")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"\"'bar' is readonly\""),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar")," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"; "),(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> Throws error")))))),(0,n.kt)("p",null,"TypeScript will also report attempts to assign to a read-only member that doesn't have a setter, so in a TypeScript project, you may want to override ",(0,n.kt)("inlineCode",{parentName:"p"},"getWithoutSet")," to ",(0,n.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,n.kt)("p",null,"A setter without getter violates the basic expectations of member-accessing. More importantly, TypeScript will not warn about such case, and the property access returns ",(0,n.kt)("inlineCode",{parentName:"p"},"undefined"),"."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},"#privateBar"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"set"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(setter) Foo.bar: number"},"bar")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val")),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},".#privateBar "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val"),";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar")," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar"),"); "),(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// -> undefined"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"#privateBar"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"set"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(setter) Foo.bar: number"},"bar")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val")),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".#privateBar "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val"),";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar")," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: number"},"bar"),"); "),(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// -> undefined")))))),(0,n.kt)("p",null,"If a setter's sole purpose is to induce side-effects on internal state, use a method instead."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},"#privateBar"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"1"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(method) Foo.setBar(val: number): void"},"setBar")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val")),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},".#privateBar "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val"),";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),"."),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(method) Foo.setBar(val: number): void"},"setBar")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"2"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},");"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"#privateBar"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"1"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(method) Foo.setBar(val: number): void"},"setBar")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val")),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".#privateBar "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(parameter) val: number"},"val"),";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),"."),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(method) Foo.setBar(val: number): void"},"setBar")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"2"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},");")))))),(0,n.kt)("h3",{id:"getter-return"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/getter-return"},(0,n.kt)("inlineCode",{parentName:"a"},"getter-return"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Configuration:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Do not allow implicitly returning ",(0,n.kt)("inlineCode",{parentName:"li"},"undefined")," (",(0,n.kt)("inlineCode",{parentName:"li"},"allowImplicit: false"),")"))),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ts(2378): A 'get' accessor must return a value."))))),(0,n.kt)("p",null,"A getter must explicitly return a value. Otherwise, TypeScript will give a weird type of ",(0,n.kt)("inlineCode",{parentName:"p"},"void"),"."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light twoslash lsp",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"get"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(getter) Foo.bar: void"},"bar")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"(",(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: void"},"bar"),"); "),(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},'// Type is "void"?'))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark twoslash lsp",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"class Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"get"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(getter) Foo.bar: void"},"bar")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")),(0,n.kt)("div",{parentName:"code",className:"line"},"\xa0"),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"new"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"constructor Foo(): Foo"},"Foo")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"();")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"namespace console\nvar console: Console"},"console"),"."),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},(0,n.kt)("data-lsp",{parentName:"span",lsp:"(method) Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)"},"log")),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"(",(0,n.kt)("data-lsp",{parentName:"span",lsp:"const foo: Foo"},"foo"),".",(0,n.kt)("data-lsp",{parentName:"span",lsp:"(property) Foo.bar: void"},"bar"),"); "),(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},'// Type is "void"?')))))),(0,n.kt)("h3",{id:"grouped-accessor-pairs"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/grouped-accessor-pairs"},(0,n.kt)("inlineCode",{parentName:"a"},"grouped-accessor-pairs"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: off")),(0,n.kt)("p",null,"We do not enforce that accessors appear in pairs, because it's also common to have all getters in one place and setters in another. Since we mandate symmetric getters and setters, we aren't worried about the absence of the other."),(0,n.kt)("div",{className:"shiki-twoslash-fragment"},(0,n.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},"Foo"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},"#a"),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},"#b"),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Getters")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"get"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"a"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},".#a;")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"get"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"b"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"return"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},".#a;")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"// Setters")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"set"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"a"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},"val"),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},".#a "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," val;")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"set"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8250DF"}},"b"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#953800"}},"val"),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},") {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"this"),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},".#b "),(0,n.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," val;")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,n.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,n.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,n.kt)("div",{parentName:"pre",className:"code-container"},(0,n.kt)("code",{parentName:"div"},(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"class"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"Foo"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"#a"),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"#b"),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},";")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Getters")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"get"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"a"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".#a;")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"get"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"b"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"() {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"return"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".#a;")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"}),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"// Setters")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"set"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"a"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"val"),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".#a "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," val;")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"set"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#D2A8FF"}},"b"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"("),(0,n.kt)("span",{parentName:"div",style:{color:"#FFA657"}},"val"),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},":"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"number"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},") {")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,n.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"this"),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},".#b "),(0,n.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," val;")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,n.kt)("div",{parentName:"code",className:"line"},(0,n.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))),(0,n.kt)("h3",{id:"no-setter-return"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-setter-return"},(0,n.kt)("inlineCode",{parentName:"a"},"no-setter-return"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error"),(0,n.kt)("li",{parentName:"ul"},"Related:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ts(2408): Setters cannot return a value."))))),(0,n.kt)("p",null,"The return values of setters are ignored and are likely a mistake."),(0,n.kt)("h2",{id:"other-class-elements"},"Other class elements"),(0,n.kt)("h3",{id:"no-empty-static-block"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-empty-static-block"},(0,n.kt)("inlineCode",{parentName:"a"},"no-empty-static-block"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,"Empty static blocks are useless and are a sign of refactoring artifacts."),(0,n.kt)("h2",{id:"inheritance"},"Inheritance"),(0,n.kt)("h3",{id:"no-extend-native"},(0,n.kt)("a",{parentName:"h3",href:"https://eslint.org/docs/rules/no-extend-native"},(0,n.kt)("inlineCode",{parentName:"a"},"no-extend-native"))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Severity: error")),(0,n.kt)("p",null,"Do not monkeypatch native prototypes. There are too many examples of this causing problems. If you want to polyfill, use a library. Otherwise, use a utility function."),(0,n.kt)("p",null,"You should generally avoid modifying the prototype of any object, including your own classes. If you want to add a method to a class, use inheritance."),(0,n.kt)("h3",{id:"subclassing-built-ins"},"Subclassing built-ins"),(0,n.kt)("p",null,"In short: don't. I'd love it if we are able to, but we live in a world where TC39 is actively messing up our experience, so to prevent more pain, use composition instead. Read ",(0,n.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/extends#subclassing_built-ins"},"subclassing built-ins")," (written by me) for more information."))}m.isMDXComponent=!0},5318:(e,a,t)=>{t.d(a,{Zo:()=>c,kt:()=>k});var s=t(7378);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);a&&(s=s.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,s)}return t}function o(e){for(var a=1;a=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var p=s.createContext({}),i=function(e){var a=s.useContext(p),t=a;return e&&(t="function"==typeof e?e(a):o(o({},a),e)),t},c=function(e){var a=i(e.components);return s.createElement(p.Provider,{value:a},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return s.createElement(s.Fragment,{},a)}},N=s.forwardRef((function(e,a){var t=e.components,n=e.mdxType,r=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=i(t),N=n,k=d["".concat(p,".").concat(N)]||d[N]||m[N]||r;return t?s.createElement(k,o(o({ref:a},c),{},{components:t})):s.createElement(k,o({ref:a},c))}));function k(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var r=t.length,o=new Array(r);o[0]=N;var l={};for(var p in a)hasOwnProperty.call(a,p)&&(l[p]=a[p]);l.originalType=e,l[d]="string"==typeof e?e:n,o[1]=l;for(var i=2;i{t.r(a),t.d(a,{assets:()=>D,contentTitle:()=>u,default:()=>C,frontMatter:()=>y,metadata:()=>g,toc:()=>F});var n=t(2685),s=t(7378),r=t(5318),l=t(8944),o=t(362),i=t(56),p=t(5720),c=t(9169);const d={tabList:"tabList_J5MA",tabItem:"tabItem_l0OV"};function m(e){const{lazy:a,block:t,defaultValue:r,values:o,groupId:m,className:N}=e,k=s.Children.map(e.children,(e=>{if((0,s.isValidElement)(e)&&"value"in e.props)return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})),v=o??k.map((e=>{let{props:{value:a,label:t,attributes:n}}=e;return{value:a,label:t,attributes:n}})),y=(0,i.l)(v,((e,a)=>e.value===a.value));if(y.length>0)throw new Error(`Docusaurus error: Duplicate values "${y.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`);const u=null===r?r:r??k.find((e=>e.props.default))?.props.value??k[0].props.value;if(null!==u&&!v.some((e=>e.value===u)))throw new Error(`Docusaurus error: The has a defaultValue "${u}" but none of its children has the corresponding value. Available values are: ${v.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);const{tabGroupChoices:g,setTabGroupChoices:D}=(0,p.U)(),[F,f]=(0,s.useState)(u),h=[],{blockElementScrollPositionUntilNextRender:C}=(0,c.o5)();if(null!=m){const e=g[m];null!=e&&e!==F&&v.some((a=>a.value===e))&&f(e)}const b=e=>{const a=e.currentTarget,t=h.indexOf(a),n=v[t].value;n!==F&&(C(a),f(n),null!=m&&D(m,String(n)))},w=e=>{let a=null;switch(e.key){case"Enter":b(e);break;case"ArrowRight":{const t=h.indexOf(e.currentTarget)+1;a=h[t]??h[0];break}case"ArrowLeft":{const t=h.indexOf(e.currentTarget)-1;a=h[t]??h[h.length-1];break}}a?.focus()};return s.createElement("div",{className:(0,l.Z)("tabs-container",d.tabList)},s.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":t},N)},v.map((e=>{let{value:a,label:t,attributes:r}=e;return s.createElement("li",(0,n.Z)({role:"tab",tabIndex:F===a?0:-1,"aria-selected":F===a,key:a,ref:e=>h.push(e),onKeyDown:w,onClick:b},r,{className:(0,l.Z)("tabs__item",d.tabItem,r?.className,{"tabs__item--active":F===a})}),t??a)}))),a?(0,s.cloneElement)(k.filter((e=>e.props.value===F))[0],{className:"margin-top--md"}):s.createElement("div",{className:"margin-top--md"},k.map(((e,a)=>(0,s.cloneElement)(e,{key:a,hidden:e.props.value!==F})))))}function N(e){const a=(0,o.Z)();return s.createElement(m,(0,n.Z)({key:String(a)},e))}const k={tabItem:"tabItem_wHwb"};function v(e){let{children:a,hidden:t,className:n}=e;return s.createElement("div",{role:"tabpanel",className:(0,l.Z)(k.tabItem,n),hidden:t},a)}const y={slug:"/",sidebar_position:1},u="Guide",g={unversionedId:"guide",id:"guide",title:"Guide",description:"This page gets you started with JC-verse's JS style guide. The JS style guide is enforced through a set of toolings:",source:"@site/../docs/guide.md",sourceDirName:".",slug:"/",permalink:"/js-style-guide/",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{slug:"/",sidebar_position:1},sidebar:"defaultSidebar",next:{title:"Base rules",permalink:"/js-style-guide/eslint-base/"}},D={},F=[{value:"How to use",id:"how-to-use",level:2},{value:"Overarching principles",id:"overarching-principles",level:2},{value:"Minimal code area",id:"minimal-code-area",level:3},{value:"Code for averagely intelligent people",id:"code-for-averagely-intelligent-people",level:3},{value:"Clear developer intent",id:"clear-developer-intent",level:3},{value:"Final words",id:"final-words",level:2}],f={toc:F},h="wrapper";function C(e){let{components:a,...t}=e;return(0,r.kt)(h,(0,n.Z)({},f,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"guide"},"Guide"),(0,r.kt)("p",null,"This page gets you started with JC-verse's JS style guide. The JS style guide is enforced through a set of toolings:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://eslint.org/"},"ESLint")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://prettier.io/"},"Prettier")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.typescriptlang.org/"},"TypeScript"))),(0,r.kt)("p",null,"We have created a sharable config for each tool."),(0,r.kt)("h2",{id:"how-to-use"},"How to use"),(0,r.kt)("p",null,"To get everything configured, you need the following files:"),(0,r.kt)(N,{mdxType:"Tabs"},(0,r.kt)(v,{value:".eslintrc",mdxType:"TabItem"},(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:".eslintrc"},(0,r.kt)("div",{parentName:"pre",className:"code-title"},".eslintrc"),(0,r.kt)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"{")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"root"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"true"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"extends"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": ["),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"jc"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"]")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:".eslintrc"},(0,r.kt)("div",{parentName:"pre",className:"code-title"},".eslintrc"),(0,r.kt)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"{")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"root"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"true"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"extends"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": ["),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"jc"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"]")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}"))))))),(0,r.kt)(v,{value:".prettierrc",mdxType:"TabItem"},(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:".prettierrc"},(0,r.kt)("div",{parentName:"pre",className:"code-title"},".prettierrc"),(0,r.kt)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"prettier-config-jc"'))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:".prettierrc"},(0,r.kt)("div",{parentName:"pre",className:"code-title"},".prettierrc"),(0,r.kt)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"prettier-config-jc"'))))))),(0,r.kt)(v,{value:".husky/pre-commit",mdxType:"TabItem"},(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:".husky/pre-commit"},(0,r.kt)("div",{parentName:"pre",className:"code-title"},".husky/pre-commit"),(0,r.kt)("div",{parentName:"pre",className:"language-id"},"bash"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#6E7781"}},"#!/bin/sh")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"."),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"$(dirname "'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"$0"),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'")/_/husky.sh"')),(0,r.kt)("div",{parentName:"code",className:"line"}),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"yarn lint-staged --allow-empty"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:".husky/pre-commit"},(0,r.kt)("div",{parentName:"pre",className:"code-title"},".husky/pre-commit"),(0,r.kt)("div",{parentName:"pre",className:"language-id"},"bash"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#8B949E"}},"#!/bin/sh")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"."),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"$(dirname "'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"$0"),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'")/_/husky.sh"')),(0,r.kt)("div",{parentName:"code",className:"line"}),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"yarn lint-staged --allow-empty"))))))),(0,r.kt)(v,{value:".lintstagedrc.json",mdxType:"TabItem"},(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:".lintstagedrc.json"},(0,r.kt)("div",{parentName:"pre",className:"code-title"},".lintstagedrc.json"),(0,r.kt)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"{")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"*.{js,ts,jsx,tsx}"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": ["),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"eslint --fix"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"],")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"*"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": [")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"prettier --ignore-unknown --write"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"cspell --no-must-find-files --no-progress"')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ]")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:".lintstagedrc.json"},(0,r.kt)("div",{parentName:"pre",className:"code-title"},".lintstagedrc.json"),(0,r.kt)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"{")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"*.{js,ts,jsx,tsx}"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": ["),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"eslint --fix"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"],")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"*"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": [")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"prettier --ignore-unknown --write"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"cspell --no-must-find-files --no-progress"')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ]")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}"))))))),(0,r.kt)(v,{value:"package.json",mdxType:"TabItem"},(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"{")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"scripts"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"format"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"prettier -w ."'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"lint"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"eslint '),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'\\"'),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},"**/*.{js,ts,jsx,tsx}"),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'\\"'),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"prepare"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"husky install"')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"{")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"scripts"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"format"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"prettier -w ."'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"lint"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"eslint '),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'\\"'),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},"**/*.{js,ts,jsx,tsx}"),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'\\"'),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"prepare"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"husky install"')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}"))))))),(0,r.kt)(v,{value:"tsconfig.json",mdxType:"TabItem"},(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:"tsconfig.json"},(0,r.kt)("div",{parentName:"pre",className:"code-title"},"tsconfig.json"),(0,r.kt)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"{")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"extends"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"tsconfig-jc"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"compilerOptions"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"target"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"es2020"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"lib"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": ["),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"esnext"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"dom"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"],")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"rootDir"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"./src"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"jsx"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"react"')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"include"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": ["),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"src"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"],")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"exclude"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": ["),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"node_modules"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"]")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:"tsconfig.json"},(0,r.kt)("div",{parentName:"pre",className:"code-title"},"tsconfig.json"),(0,r.kt)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"{")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"extends"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"tsconfig-jc"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"compilerOptions"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"target"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"es2020"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"lib"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": ["),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"esnext"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"dom"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"],")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"rootDir"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"./src"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"jsx"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"react"')),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"include"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": ["),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"src"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"],")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"exclude"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": ["),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"node_modules"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"]")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}"))))))),(0,r.kt)(v,{value:".cspell.json",mdxType:"TabItem"},(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:".cspell.json"},(0,r.kt)("div",{parentName:"pre",className:"code-title"},".cspell.json"),(0,r.kt)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"{")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"version"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"0.2"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"gitignoreRoot"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"."'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"useGitignore"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"true"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"dictionaries"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": ["),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"typescript"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"project-words"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"],")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"dictionaryDefinitions"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": [")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"name"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"project-words"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"path"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"./project-words.txt"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"noSuggest"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"true")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," ],")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},'"ignorePaths"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},": ["),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"package.json"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"yarn.lock"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#0A3069"}},'"project-words.txt"'),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"]")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:".cspell.json"},(0,r.kt)("div",{parentName:"pre",className:"code-title"},".cspell.json"),(0,r.kt)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"{")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"version"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"0.2"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"gitignoreRoot"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"."'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"useGitignore"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"true"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"dictionaries"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": ["),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"typescript"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"project-words"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"],")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"dictionaryDefinitions"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": [")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"name"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"project-words"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"path"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"./project-words.txt"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"noSuggest"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"true")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ],")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},'"ignorePaths"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},": ["),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"package.json"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"yarn.lock"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.kt)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"project-words.txt"'),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"]")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))))),(0,r.kt)("p",null,"Then, you need to install some dependencies:"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"bash"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"yarn add -D @typescript-eslint/eslint-plugin @typescript-eslint/parser cspell eslint eslint-config-jc eslint-plugin-header eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks husky lint-staged prettier prettier-config-jc tsconfig-jc typescript"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"bash"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"yarn add -D @typescript-eslint/eslint-plugin @typescript-eslint/parser cspell eslint eslint-config-jc eslint-plugin-header eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks husky lint-staged prettier prettier-config-jc tsconfig-jc typescript")))))),(0,r.kt)("p",null,"That's a lot of things to do. Fear not\u2014we have a scaffolding utility to set everything up. Run:"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"bash"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"yarn create jc-project"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"bash"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"yarn create jc-project")))))),(0,r.kt)("p",null,"And you should be finished."),(0,r.kt)("h2",{id:"overarching-principles"},"Overarching principles"),(0,r.kt)("p",null,"Our style may sometimes contradict with other styles you have seen. Our decisions are based on the following principles:"),(0,r.kt)("h3",{id:"minimal-code-area"},"Minimal code area"),(0,r.kt)("p",null,"We want our code to span as little area as possible, given the same set of formatting rules. This means:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fewer levels of indentation"),(0,r.kt)("li",{parentName:"ul"},"Fewer useless lines"),(0,r.kt)("li",{parentName:"ul"},"More usage of new and concise syntax")),(0,r.kt)("p",null,"As a simple example, instead of this:"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"parseResult"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," fileName,")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," path,")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," extension,")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}},"};"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"parseResult"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," fileName,")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," path,")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," extension,")),(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")))))),(0,r.kt)("p",null,"Prefer this:"),(0,r.kt)("div",{className:"shiki-twoslash-fragment"},(0,r.kt)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#0550AE"}},"parseResult"),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#24292F"}}," { fileName, path, extension };"))))),(0,r.kt)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.kt)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.kt)("div",{parentName:"pre",className:"code-container"},(0,r.kt)("code",{parentName:"div"},(0,r.kt)("div",{parentName:"code",className:"line"},(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#79C0FF"}},"parseResult"),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.kt)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.kt)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { fileName, path, extension };")))))),(0,r.kt)("p",null,"A rule that marginally improves readability but bloats the code area will not be considered."),(0,r.kt)("h3",{id:"code-for-averagely-intelligent-people"},"Code for averagely intelligent people"),(0,r.kt)("p",null,"Our code is written for people of average intelligence and with reasonable experience of JavaScript/TypeScript. Therefore, we will:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Not be afraid of using new syntax (especially if it helps with ",(0,r.kt)("strong",{parentName:"li"},"minimal code area"),")"),(0,r.kt)("li",{parentName:"ul"},"Not be afraid of preferring concise expressions and control flow instead of writing spaghetti code")),(0,r.kt)("p",null,'We will not enable most rules that forbid syntaxes claimed to be "confusing for some people". Quite the contrary\u2014we encourage you to consciously think about how advanced usage of syntaxes can help reduce code area.'),(0,r.kt)("h3",{id:"clear-developer-intent"},"Clear developer intent"),(0,r.kt)("p",null,"During refactor, a big hazard is being unclear about whether a specific construct is guarding against a potential edge-case, or simply being over-pessimistic. Do NOT program overly defensively\u2014only when such edge-cases are actually reachable. For example, if there can only ever be three values passed to a ",(0,r.kt)("inlineCode",{parentName:"p"},"switch...case"),", do not add a default case. If TS tells you that a variable is possibly ",(0,r.kt)("inlineCode",{parentName:"p"},"undefined"),", but it's simply due to a flaw in the control flow analysis, then use a simple non-null assertion instead of adding a redundant ",(0,r.kt)("inlineCode",{parentName:"p"},"if")," guard."),(0,r.kt)("h2",{id:"final-words"},"Final words"),(0,r.kt)("p",null,"BTW, Nina wants me to mention that I think she's the cutest girl :)"))}C.isMDXComponent=!0},5318:(e,a,t)=>{t.d(a,{Zo:()=>c,kt:()=>k});var n=t(7378);function s(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function l(e){for(var a=1;a=0||(s[t]=e[t]);return s}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}var i=n.createContext({}),p=function(e){var a=n.useContext(i),t=a;return e&&(t="function"==typeof e?e(a):l(l({},a),e)),t},c=function(e){var a=p(e.components);return n.createElement(i.Provider,{value:a},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},N=n.forwardRef((function(e,a){var t=e.components,s=e.mdxType,r=e.originalType,i=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),d=p(t),N=s,k=d["".concat(i,".").concat(N)]||d[N]||m[N]||r;return t?n.createElement(k,l(l({ref:a},c),{},{components:t})):n.createElement(k,l({ref:a},c))}));function k(e,a){var t=arguments,s=a&&a.mdxType;if("string"==typeof e||s){var r=t.length,l=new Array(r);l[0]=N;var o={};for(var i in a)hasOwnProperty.call(a,i)&&(o[i]=a[i]);o.originalType=e,o[d]="string"==typeof e?e:s,l[1]=o;for(var p=2;p{t.d(a,{xA:()=>y,yg:()=>g});var n=t(3696);function s(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function l(e){for(var a=1;a=0||(s[t]=e[t]);return s}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}var i=n.createContext({}),p=function(e){var a=n.useContext(i),t=a;return e&&(t="function"==typeof e?e(a):l(l({},a),e)),t},y=function(e){var a=p(e.components);return n.createElement(i.Provider,{value:a},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},m=n.forwardRef((function(e,a){var t=e.components,s=e.mdxType,r=e.originalType,i=e.parentName,y=o(e,["components","mdxType","originalType","parentName"]),c=p(t),m=s,g=c["".concat(i,".").concat(m)]||c[m]||d[m]||r;return t?n.createElement(g,l(l({ref:a},y),{},{components:t})):n.createElement(g,l({ref:a},y))}));function g(e,a){var t=arguments,s=a&&a.mdxType;if("string"==typeof e||s){var r=t.length,l=new Array(r);l[0]=m;var o={};for(var i in a)hasOwnProperty.call(a,i)&&(o[i]=a[i]);o.originalType=e,o[c]="string"==typeof e?e:s,l[1]=o;for(var p=2;p{t.r(a),t.d(a,{assets:()=>F,contentTitle:()=>u,default:()=>b,frontMatter:()=>v,metadata:()=>D,toc:()=>f});var n=t(8102),s=t(3696),r=t(9916),l=t(8017),o=t(6681),i=t(4544),p=t(6594),y=t(766);const c={tabList:"tabList_J5MA",tabItem:"tabItem_l0OV"};function d(e){const{lazy:a,block:t,defaultValue:r,values:o,groupId:d,className:m}=e,g=s.Children.map(e.children,(e=>{if((0,s.isValidElement)(e)&&"value"in e.props)return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})),N=o??g.map((e=>{let{props:{value:a,label:t,attributes:n}}=e;return{value:a,label:t,attributes:n}})),v=(0,i.X)(N,((e,a)=>e.value===a.value));if(v.length>0)throw new Error(`Docusaurus error: Duplicate values "${v.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`);const u=null===r?r:r??g.find((e=>e.props.default))?.props.value??g[0].props.value;if(null!==u&&!N.some((e=>e.value===u)))throw new Error(`Docusaurus error: The has a defaultValue "${u}" but none of its children has the corresponding value. Available values are: ${N.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);const{tabGroupChoices:D,setTabGroupChoices:F}=(0,p.x)(),[f,h]=(0,s.useState)(u),C=[],{blockElementScrollPositionUntilNextRender:b}=(0,y.a_)();if(null!=d){const e=D[d];null!=e&&e!==f&&N.some((a=>a.value===e))&&h(e)}const w=e=>{const a=e.currentTarget,t=C.indexOf(a),n=N[t].value;n!==f&&(b(a),h(n),null!=d&&F(d,String(n)))},A=e=>{let a=null;switch(e.key){case"Enter":w(e);break;case"ArrowRight":{const t=C.indexOf(e.currentTarget)+1;a=C[t]??C[0];break}case"ArrowLeft":{const t=C.indexOf(e.currentTarget)-1;a=C[t]??C[C.length-1];break}}a?.focus()};return s.createElement("div",{className:(0,l.A)("tabs-container",c.tabList)},s.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.A)("tabs",{"tabs--block":t},m)},N.map((e=>{let{value:a,label:t,attributes:r}=e;return s.createElement("li",(0,n.A)({role:"tab",tabIndex:f===a?0:-1,"aria-selected":f===a,key:a,ref:e=>C.push(e),onKeyDown:A,onClick:w},r,{className:(0,l.A)("tabs__item",c.tabItem,r?.className,{"tabs__item--active":f===a})}),t??a)}))),a?(0,s.cloneElement)(g.filter((e=>e.props.value===f))[0],{className:"margin-top--md"}):s.createElement("div",{className:"margin-top--md"},g.map(((e,a)=>(0,s.cloneElement)(e,{key:a,hidden:e.props.value!==f})))))}function m(e){const a=(0,o.A)();return s.createElement(d,(0,n.A)({key:String(a)},e))}const g={tabItem:"tabItem_wHwb"};function N(e){let{children:a,hidden:t,className:n}=e;return s.createElement("div",{role:"tabpanel",className:(0,l.A)(g.tabItem,n),hidden:t},a)}const v={slug:"/",sidebar_position:1},u="Guide",D={unversionedId:"guide",id:"guide",title:"Guide",description:"This page gets you started with JC-verse's JS style guide. The JS style guide is enforced through a set of toolings:",source:"@site/../docs/guide.md",sourceDirName:".",slug:"/",permalink:"/js-style-guide/",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{slug:"/",sidebar_position:1},sidebar:"defaultSidebar",next:{title:"Base rules",permalink:"/js-style-guide/eslint-base/"}},F={},f=[{value:"How to use",id:"how-to-use",level:2},{value:"Overarching principles",id:"overarching-principles",level:2},{value:"Minimal code area",id:"minimal-code-area",level:3},{value:"Code for averagely intelligent people",id:"code-for-averagely-intelligent-people",level:3},{value:"Clear developer intent",id:"clear-developer-intent",level:3},{value:"Final words",id:"final-words",level:2}],h={toc:f},C="wrapper";function b(e){let{components:a,...t}=e;return(0,r.yg)(C,(0,n.A)({},h,t,{components:a,mdxType:"MDXLayout"}),(0,r.yg)("h1",{id:"guide"},"Guide"),(0,r.yg)("p",null,"This page gets you started with JC-verse's JS style guide. The JS style guide is enforced through a set of toolings:"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"https://eslint.org/"},"ESLint")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"https://prettier.io/"},"Prettier")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"https://www.typescriptlang.org/"},"TypeScript"))),(0,r.yg)("p",null,"We have created a sharable config for each tool."),(0,r.yg)("h2",{id:"how-to-use"},"How to use"),(0,r.yg)("p",null,"To get everything configured, you need the following files:"),(0,r.yg)(m,{mdxType:"Tabs"},(0,r.yg)(N,{value:".eslintrc",mdxType:"TabItem"},(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:".eslintrc"},(0,r.yg)("div",{parentName:"pre",className:"code-title"},".eslintrc"),(0,r.yg)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"{")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"root"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"true"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"extends"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": ["),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"jc"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"]")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:".eslintrc"},(0,r.yg)("div",{parentName:"pre",className:"code-title"},".eslintrc"),(0,r.yg)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"{")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"root"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"true"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"extends"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": ["),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"jc"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"]")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}"))))))),(0,r.yg)(N,{value:".prettierrc",mdxType:"TabItem"},(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:".prettierrc"},(0,r.yg)("div",{parentName:"pre",className:"code-title"},".prettierrc"),(0,r.yg)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"prettier-config-jc"'))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:".prettierrc"},(0,r.yg)("div",{parentName:"pre",className:"code-title"},".prettierrc"),(0,r.yg)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"prettier-config-jc"'))))))),(0,r.yg)(N,{value:".husky/pre-commit",mdxType:"TabItem"},(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:".husky/pre-commit"},(0,r.yg)("div",{parentName:"pre",className:"code-title"},".husky/pre-commit"),(0,r.yg)("div",{parentName:"pre",className:"language-id"},"bash"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#6E7781"}},"#!/bin/sh")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"$(dirname "'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"$0"),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'")/_/husky.sh"')),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"yarn lint-staged --allow-empty"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:".husky/pre-commit"},(0,r.yg)("div",{parentName:"pre",className:"code-title"},".husky/pre-commit"),(0,r.yg)("div",{parentName:"pre",className:"language-id"},"bash"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#8B949E"}},"#!/bin/sh")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"."),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"$(dirname "'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"$0"),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'")/_/husky.sh"')),(0,r.yg)("div",{parentName:"code",className:"line"}),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"yarn lint-staged --allow-empty"))))))),(0,r.yg)(N,{value:".lintstagedrc.json",mdxType:"TabItem"},(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:".lintstagedrc.json"},(0,r.yg)("div",{parentName:"pre",className:"code-title"},".lintstagedrc.json"),(0,r.yg)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"{")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"*.{js,ts,jsx,tsx}"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": ["),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"eslint --fix"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"],")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"*"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": [")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"prettier --ignore-unknown --write"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"cspell --no-must-find-files --no-progress"')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ]")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:".lintstagedrc.json"},(0,r.yg)("div",{parentName:"pre",className:"code-title"},".lintstagedrc.json"),(0,r.yg)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"{")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"*.{js,ts,jsx,tsx}"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": ["),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"eslint --fix"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"],")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"*"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": [")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"prettier --ignore-unknown --write"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"cspell --no-must-find-files --no-progress"')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ]")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}"))))))),(0,r.yg)(N,{value:"package.json",mdxType:"TabItem"},(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"{")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"scripts"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"format"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"prettier -w ."'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"lint"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"eslint '),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'\\"'),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},"**/*.{js,ts,jsx,tsx}"),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'\\"'),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"prepare"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"husky install"')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"{")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"scripts"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"format"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"prettier -w ."'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"lint"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"eslint '),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'\\"'),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},"**/*.{js,ts,jsx,tsx}"),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'\\"'),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"prepare"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"husky install"')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}"))))))),(0,r.yg)(N,{value:"tsconfig.json",mdxType:"TabItem"},(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:"tsconfig.json"},(0,r.yg)("div",{parentName:"pre",className:"code-title"},"tsconfig.json"),(0,r.yg)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"{")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"extends"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"tsconfig-jc"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"compilerOptions"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"target"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"es2020"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"lib"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": ["),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"esnext"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"dom"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"],")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"rootDir"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"./src"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"jsx"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"react"')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," },")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"include"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": ["),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"src"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"],")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"exclude"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": ["),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"node_modules"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"]")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:"tsconfig.json"},(0,r.yg)("div",{parentName:"pre",className:"code-title"},"tsconfig.json"),(0,r.yg)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"{")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"extends"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"tsconfig-jc"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"compilerOptions"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"target"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"es2020"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"lib"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": ["),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"esnext"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"dom"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"],")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"rootDir"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"./src"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"jsx"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"react"')),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," },")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"include"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": ["),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"src"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"],")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"exclude"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": ["),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"node_modules"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"]")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}"))))))),(0,r.yg)(N,{value:".cspell.json",mdxType:"TabItem"},(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light with-title",style:{backgroundColor:"#ffffff",color:"#24292f"},title:".cspell.json"},(0,r.yg)("div",{parentName:"pre",className:"code-title"},".cspell.json"),(0,r.yg)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"{")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"version"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"0.2"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"gitignoreRoot"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"."'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"useGitignore"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"true"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"dictionaries"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": ["),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"typescript"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"project-words"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"],")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"dictionaryDefinitions"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": [")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"name"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"project-words"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"path"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"./project-words.txt"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"noSuggest"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"true")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," ],")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},'"ignorePaths"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},": ["),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"package.json"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"yarn.lock"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#0A3069"}},'"project-words.txt"'),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"]")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"}"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark with-title",style:{backgroundColor:"#0d1117",color:"#c9d1d9"},title:".cspell.json"},(0,r.yg)("div",{parentName:"pre",className:"code-title"},".cspell.json"),(0,r.yg)("div",{parentName:"pre",className:"language-id"},"json"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"{")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"version"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"0.2"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"gitignoreRoot"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"."'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"useGitignore"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"true"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"dictionaries"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": ["),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"typescript"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"project-words"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"],")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"dictionaryDefinitions"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": [")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"name"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"project-words"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"path"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"./project-words.txt"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},",")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"noSuggest"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"true")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," }")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," ],")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},'"ignorePaths"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},": ["),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"package.json"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"yarn.lock"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},", "),(0,r.yg)("span",{parentName:"div",style:{color:"#A5D6FF"}},'"project-words.txt"'),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"]")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"}")))))))),(0,r.yg)("p",null,"Then, you need to install some dependencies:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"bash"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"yarn add -D @typescript-eslint/eslint-plugin @typescript-eslint/parser cspell eslint eslint-config-jc eslint-plugin-header eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks husky lint-staged prettier prettier-config-jc tsconfig-jc typescript"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"bash"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"yarn add -D @typescript-eslint/eslint-plugin @typescript-eslint/parser cspell eslint eslint-config-jc eslint-plugin-header eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks husky lint-staged prettier prettier-config-jc tsconfig-jc typescript")))))),(0,r.yg)("p",null,"That's a lot of things to do. Fear not\u2014we have a scaffolding utility to set everything up. Run:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"bash"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"yarn create jc-project"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"bash"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"yarn create jc-project")))))),(0,r.yg)("p",null,"And you should be finished."),(0,r.yg)("h2",{id:"overarching-principles"},"Overarching principles"),(0,r.yg)("p",null,"Our style may sometimes contradict with other styles you have seen. Our decisions are based on the following principles:"),(0,r.yg)("h3",{id:"minimal-code-area"},"Minimal code area"),(0,r.yg)("p",null,"We want our code to span as little area as possible, given the same set of formatting rules. This means:"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Fewer levels of indentation"),(0,r.yg)("li",{parentName:"ul"},"Fewer useless lines"),(0,r.yg)("li",{parentName:"ul"},"More usage of new and concise syntax")),(0,r.yg)("p",null,"As a simple example, instead of this:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"parseResult"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," fileName,")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," path,")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," extension,")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}},"};"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"parseResult"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," {")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," fileName,")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," path,")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," extension,")),(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}},"};")))))),(0,r.yg)("p",null,"Prefer this:"),(0,r.yg)("div",{className:"shiki-twoslash-fragment"},(0,r.yg)("pre",{parentName:"div",className:"shiki github-light",style:{backgroundColor:"#ffffff",color:"#24292f"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#0550AE"}},"parseResult"),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#CF222E"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#24292F"}}," { fileName, path, extension };"))))),(0,r.yg)("pre",{parentName:"div",className:"shiki github-dark",style:{backgroundColor:"#0d1117",color:"#c9d1d9"}},(0,r.yg)("div",{parentName:"pre",className:"language-id"},"ts"),(0,r.yg)("div",{parentName:"pre",className:"code-container"},(0,r.yg)("code",{parentName:"div"},(0,r.yg)("div",{parentName:"code",className:"line"},(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"const"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#79C0FF"}},"parseResult"),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," "),(0,r.yg)("span",{parentName:"div",style:{color:"#FF7B72"}},"="),(0,r.yg)("span",{parentName:"div",style:{color:"#C9D1D9"}}," { fileName, path, extension };")))))),(0,r.yg)("p",null,"A rule that marginally improves readability but bloats the code area will not be considered."),(0,r.yg)("h3",{id:"code-for-averagely-intelligent-people"},"Code for averagely intelligent people"),(0,r.yg)("p",null,"Our code is written for people of average intelligence and with reasonable experience of JavaScript/TypeScript. Therefore, we will:"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Not be afraid of using new syntax (especially if it helps with ",(0,r.yg)("strong",{parentName:"li"},"minimal code area"),")"),(0,r.yg)("li",{parentName:"ul"},"Not be afraid of preferring concise expressions and control flow instead of writing spaghetti code")),(0,r.yg)("p",null,'We will not enable most rules that forbid syntaxes claimed to be "confusing for some people". Quite the contrary\u2014we encourage you to consciously think about how advanced usage of syntaxes can help reduce code area.'),(0,r.yg)("h3",{id:"clear-developer-intent"},"Clear developer intent"),(0,r.yg)("p",null,"During refactor, a big hazard is being unclear about whether a specific construct is guarding against a potential edge-case, or simply being over-pessimistic. Do NOT program overly defensively\u2014only when such edge-cases are actually reachable. For example, if there can only ever be three values passed to a ",(0,r.yg)("inlineCode",{parentName:"p"},"switch...case"),", do not add a default case. If TS tells you that a variable is possibly ",(0,r.yg)("inlineCode",{parentName:"p"},"undefined"),", but it's simply due to a flaw in the control flow analysis, then use a simple non-null assertion instead of adding a redundant ",(0,r.yg)("inlineCode",{parentName:"p"},"if")," guard."),(0,r.yg)("h2",{id:"final-words"},"Final words"),(0,r.yg)("p",null,"BTW, Nina wants me to mention that I think she's the cutest girl :)"))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.292bf4a6.js b/assets/js/main.292bf4a6.js new file mode 100644 index 0000000..17ecf1e --- /dev/null +++ b/assets/js/main.292bf4a6.js @@ -0,0 +1,2 @@ +/*! For license information please see main.292bf4a6.js.LICENSE.txt */ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[792],{9579:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>o});var r=n(3696);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},7863:(e,t,n)=>{"use strict";var r=n(3696),a=n(8325),o=n(9941),i=n(9005),l=n(6655);const s=[n(9869),n(7124),n(8912),n(7729)];var u=n(7577),c=n(9519),d=n(3971);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(8102),m=n(7854),g=n(7032),h=n(883),b=n(7412),v=n(5605),y=n(577),w=n(9984),k=n(8721),E=n(689);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.A)(),n=(0,y.o)();return r.createElement(m.A,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.A)(),a=function(){const{siteConfig:{url:e}}=(0,g.A)(),{pathname:t}=(0,c.zy)();return e+(0,h.A)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.A,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function C(){const{i18n:{currentLocale:e}}=(0,g.A)(),{metadata:t,image:n}=(0,b.p)();return r.createElement(r.Fragment,null,r.createElement(m.A,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.w})),n&&r.createElement(v.be,{image:n}),r.createElement(x,null),r.createElement(S,null),r.createElement(E.A,{tag:k.Cy,locale:e}),r.createElement(m.A,null,t.map(((e,t)=>r.createElement("meta",(0,p.A)({key:t},e))))))}const A=new Map;function T(e){if(A.has(e.pathname))return{...e,pathname:A.get(e.pathname)};if((0,d.u)(u.A,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return A.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return A.set(e.pathname,t),{...e,pathname:t}}var _=n(9579),L=n(3765);function R(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(a&&function(e){const{hash:t}=e;if(t){const e=decodeURIComponent(t.substring(1)),n=document.getElementById(e);n?.scrollIntoView()}else window.scrollTo(0,0)}(n),R("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function P(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?R("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=R("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),P(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(c.qh,{location:t,render:()=>e}))}}const D=O,I="docusaurus-base-url-issue-banner-container",M="docusaurus-base-url-issue-banner",j="docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function B(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${F}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${I}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[F]=!1}),[]),r.createElement(r.Fragment,null,!l.A.canUseDOM&&r.createElement(m.A,null,r.createElement("script",null,B(e))),r.createElement("div",{id:I}))}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.A)(),{pathname:n}=(0,c.zy)();return t&&n===e?r.createElement(z,null):null}function U(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,g.A)(),i=(0,h.A)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.A,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var q=n(5291);function G(){const e=(0,d.v)(u.A),t=(0,c.zy)();return r.createElement(q.A,null,r.createElement(L.l,null,r.createElement(_.x,null,r.createElement(f,null,r.createElement(U,null),r.createElement(C,null),r.createElement($,null),r.createElement(D,{location:T(t)},e)))))}var H=n(4054);const V=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var W=n(7991);const K=new Set,Q=new Set,Y=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,X={prefetch(e){if(!(e=>!Y()&&!Q.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,d.u)(u.A,e).flatMap((e=>{return t=e.route.path,Object.entries(H).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,W.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?V(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!Y()&&!Q.has(e))(e)&&(Q.add(e),P(e))},J=Object.freeze(X);if(l.A.canUseDOM){window.docusaurus=J;const e=a.hydrate;P(window.location.pathname).then((()=>{e(r.createElement(i.vd,null,r.createElement(o.Kd,null,r.createElement(G,null))),document.getElementById("__docusaurus"))}))}},3765:(e,t,n)=>{"use strict";n.d(t,{o:()=>c,l:()=>d});var r=n(3696),a=n(4784);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/js-style-guide/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/js-style-guide/","mainDocId":"guide","docs":[{"id":"eslint-base/async","path":"/js-style-guide/eslint-base/async","sidebar":"defaultSidebar"},{"id":"eslint-base/collections","path":"/js-style-guide/eslint-base/collections","sidebar":"defaultSidebar"},{"id":"eslint-base/control-flow","path":"/js-style-guide/eslint-base/control-flow","sidebar":"defaultSidebar"},{"id":"eslint-base/formatting","path":"/js-style-guide/eslint-base/formatting","sidebar":"defaultSidebar"},{"id":"eslint-base/functions","path":"/js-style-guide/eslint-base/functions","sidebar":"defaultSidebar"},{"id":"eslint-base/index","path":"/js-style-guide/eslint-base/","sidebar":"defaultSidebar"},{"id":"eslint-base/literals","path":"/js-style-guide/eslint-base/literals","sidebar":"defaultSidebar"},{"id":"eslint-base/modules","path":"/js-style-guide/eslint-base/modules","sidebar":"defaultSidebar"},{"id":"eslint-base/objects-classes","path":"/js-style-guide/eslint-base/objects-classes","sidebar":"defaultSidebar"},{"id":"eslint-base/operators","path":"/js-style-guide/eslint-base/operators","sidebar":"defaultSidebar"},{"id":"eslint-base/variables-names","path":"/js-style-guide/eslint-base/variables-names","sidebar":"defaultSidebar"},{"id":"guide","path":"/js-style-guide/","sidebar":"defaultSidebar"},{"id":"typescript/base","path":"/js-style-guide/typescript/base","sidebar":"defaultSidebar"},{"id":"typescript/index","path":"/js-style-guide/typescript/","sidebar":"defaultSidebar"},{"id":"typescript/type-checked","path":"/js-style-guide/typescript/type-checked","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/js-style-guide/","label":"guide"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(2654);const s=JSON.parse('{"docusaurusVersion":"2.2.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.2.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.2.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.2.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.2.0"},"docusaurus-theme-shiki-twoslash":{"type":"package","name":"docusaurus-preset-shiki-twoslash","version":"1.1.41"}}}'),u={siteConfig:a.A,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},5291:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});var r=n(3696),a=n(6655),o=n(7854),i=n(6436);function l(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",height:"50vh",width:"100%",fontSize:"20px"}},r.createElement("h1",null,"This page crashed."),r.createElement("p",null,t.message),r.createElement("button",{type:"button",onClick:n},"Try again"))}function s(e){let{error:t,tryAgain:n}=e;return r.createElement(c,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(o.A,null,r.createElement("title",null,"Page Error")),r.createElement(i.A,null,r.createElement(l,{error:t,tryAgain:n})))}const u=e=>r.createElement(s,e);class c extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??u)(e)}return e??null}}},6655:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},7854:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(3696),a=n(9005);function o(e){return r.createElement(a.mg,e)}},1611:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(8102),a=n(3696),o=n(9941),i=n(5994),l=n(7032),s=n(2616),u=n(6655);const c=a.createContext({collectLink:()=>{}});var d=n(883);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.A)(),{withBaseUrl:k}=(0,d.h)(),E=(0,a.useContext)(c),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const x=f||p;const C=(0,s.A)(x),A=x?.replace("pathname://","");let T=void 0!==A?(_=A,b&&(e=>e.startsWith("/"))(_)?k(_):_):void 0;var _;T&&C&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const L=(0,a.useRef)(!1),R=n?o.k2:o.N_,N=u.A.canUseIntersectionObserver,P=(0,a.useRef)(),O=()=>{L.current||null==T||(window.docusaurus.preload(T),L.current=!0)};(0,a.useEffect)((()=>(!N&&C&&null!=T&&window.docusaurus.prefetch(T),()=>{N&&P.current&&P.current.disconnect()})),[P,T,N,C]);const D=T?.startsWith("#")??!1,I=!T||!C||D;return I||h||E.collectLink(T),I?a.createElement("a",(0,r.A)({ref:S,href:T},x&&!C&&{target:"_blank",rel:"noopener noreferrer"},v)):a.createElement(R,(0,r.A)({},v,{onMouseEnter:O,onTouchStart:O,innerRef:e=>{S.current=e,N&&e&&C&&(P.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(P.current.unobserve(e),P.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),P.current.observe(e))},to:T},n&&{isActive:g,activeClassName:m}))}const p=a.forwardRef(f)},6712:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=()=>null},6590:(e,t,n)=>{"use strict";n.d(t,{A:()=>s,T:()=>l});var r=n(3696);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(2654);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},8287:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},2616:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>a,z:()=>r})},883:(e,t,n)=>{"use strict";n.d(t,{A:()=>i,h:()=>o});var r=n(7032),a=n(2616);function o(){const{siteConfig:{baseUrl:e,url:t}}=(0,r.A)();return{withBaseUrl:(n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.z)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)}}function i(e,t){void 0===t&&(t={});const{withBaseUrl:n}=o();return n(e,t)}},7032:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(3696),a=n(3765);function o(){return(0,r.useContext)(a.o)}},6681:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(3696),a=n(9579);function o(){return(0,r.useContext)(a.o)}},7991:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},580:(e,t,n)=>{"use strict";n.d(t,{W:()=>o,o:()=>a});var r=n(3696);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},4548:(e,t,n)=>{"use strict";n.d(t,{zK:()=>g,vT:()=>f,Gy:()=>c,HW:()=>h,ht:()=>d,r7:()=>m,jh:()=>p});var r=n(9519),a=n(7032),o=n(8287);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>function(e,t,n){void 0===t&&(t=o.W),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function p(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.zy)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8912:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(7671),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},7124:(e,t,n)=>{"use strict";n.r(t);var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=E.value.length,E=E.next){var x=E.value;if(t.length>e.length)return;if(!(x instanceof a)){var C,A=1;if(v){if(!(C=o(k,S,e,b))||C.index>=e.length)break;var T=C.index,_=C.index+C[0].length,L=S;for(L+=E.value.length;T>=L;)L+=(E=E.next).value.length;if(S=L-=E.value.length,E.value instanceof a)continue;for(var R=E;R!==t.tail&&(L<_||"string"==typeof R.value);R=R.next)A++,L+=R.value.length;A--,x=e.slice(S,L),C.index-=S}else if(!(C=o(k,0,x,b)))continue;T=C.index;var N=C[0],P=x.slice(0,T),O=x.slice(T+N.length),D=S+x.length;d&&D>d.reach&&(d.reach=D);var I=E.prev;if(P&&(I=s(t,I,P),S+=P.length),u(t,I,A),E=s(t,I,new a(f,h?r.tokenize(N,h):N,y,N)),O&&s(t,E,O),A>1){var M={cause:f+","+m,reach:D};i(e,t,n,E.prev,S,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var g=[p];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++a;var g=f.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a;var i=n(4784);!function(e){const{themeConfig:{prism:t}}=i.A,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(1441)(`./prism-${e}`)})),delete globalThis.Prism}(o)},9016:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(3696);const a={iconExternalLink:"iconExternalLink_nPrP"};function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},6436:(e,t,n)=>{"use strict";n.d(t,{A:()=>it});var r=n(3696),a=n(8017),o=n(5291),i=n(5605),l=n(8102),s=n(9519),u=n(6590),c=n(2432);const d="docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:a}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.A)({},e,{href:`#${d}`,onClick:a}),t))}var h=n(3237),b=n(9984);const v={skipToContent:"skipToContent_oPtH"};function y(){return r.createElement(g,{className:v.skipToContent})}var w=n(7412),k=n(3043);function E(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.A)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_J5rP"};function x(e){return r.createElement("button",(0,l.A)({type:"button","aria-label":(0,u.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.A)("clean-btn close",S.closeButton,e.className)}),r.createElement(E,{width:14,height:14,strokeWidth:3.1}))}const C={content:"content_bSb_"};function A(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return r.createElement("div",(0,l.A)({},e,{className:(0,a.A)(C.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_zJRd",announcementBarPlaceholder:"announcementBarPlaceholder_NpUd",announcementBarClose:"announcementBarClose_Jjdj",announcementBarContent:"announcementBarContent_t7IR"};function _(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.Mj)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(A,{className:T.announcementBarContent}),i&&r.createElement(x,{onClick:n,className:T.announcementBarClose}))}var L=n(5974),R=n(766);var N=n(5198),P=n(5454);const O=r.createContext(null);function D(e){let{children:t}=e;const n=function(){const e=(0,L.M)(),t=(0,P.YL)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,N.ZC)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(O.Provider,{value:n},t)}function I(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function M(){const e=(0,r.useContext)(O);if(!e)throw new N.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,P.YL)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:I(o)})),[a,o,t])}function j(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=M();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var F=n(2363),B=n(6681);function z(e){return r.createElement("svg",(0,l.A)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function $(e){return r.createElement("svg",(0,l.A)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const U={toggle:"toggle_ki11",toggleButton:"toggleButton_MMFG",darkToggleIcon:"darkToggleIcon_U96C",lightToggleIcon:"lightToggleIcon_lgto",toggleButtonDisabled:"toggleButtonDisabled_Uw7m"};function q(e){let{className:t,value:n,onChange:o}=e;const i=(0,B.A)(),l=(0,u.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===n?(0,u.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.A)(U.toggle,t)},r.createElement("button",{className:(0,a.A)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled),type:"button",onClick:()=>o("dark"===n?"light":"dark"),disabled:!i,title:l,"aria-label":l,"aria-live":"polite"},r.createElement(z,{className:(0,a.A)(U.toggleIcon,U.lightToggleIcon)}),r.createElement($,{className:(0,a.A)(U.toggleIcon,U.darkToggleIcon)})))}const G=r.memo(q);function H(e){let{className:t}=e;const n=(0,w.p)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,F.G)();return n?null:r.createElement(G,{className:t,value:a,onChange:o})}var V=n(699);function W(){return r.createElement(V.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,L.M)();return r.createElement("button",{type:"button","aria-label":(0,u.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(E,{color:"var(--ifm-color-emphasis-600)"}))}function Q(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(W,null),r.createElement(H,{className:"margin-right--md"}),r.createElement(K,null))}var Y=n(1611),X=n(883),J=n(2616);function Z(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var ee=n(9016);function te(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,X.A)(a),p=(0,X.A)(t),m=(0,X.A)(o,{forcePrependBaseUrl:!0}),g=i&&o&&!(0,J.A)(o),h=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,g&&r.createElement(ee.A,u&&{width:12,height:12}))};return o?r.createElement(Y.A,(0,l.A)({href:c?m:o},d,h)):r.createElement(Y.A,(0,l.A)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?Z(n,t.pathname):t.pathname.startsWith(p)},d,h))}function ne(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(te,(0,l.A)({className:(0,a.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function re(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(te,(0,l.A)({className:(0,a.A)("menu__link",t)},o)))}function ae(e){let{mobile:t=!1,position:n,...a}=e;const o=t?re:ne;return r.createElement(o,(0,l.A)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var oe=n(51),ie=n(4379),le=n(7032);function se(e,t){return e.some((e=>function(e,t){return!!(0,ie.ys)(e.to,t)||!!Z(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[u]),r.createElement("div",{ref:u,className:(0,a.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(te,(0,l.A)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.A)("navbar__link",o)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,n)=>r.createElement(Se,(0,l.A)({isDropdownItem:!0,onKeyDown:e=>{if(n===t.length-1&&"Tab"===e.key){e.preventDefault(),d(!1);const t=u.current.nextElementSibling;if(t){(t instanceof HTMLAnchorElement?t:t.querySelector("a")).focus()}}},activeClassName:"dropdown__link--active"},e,{key:n}))))))}function ce(e){let{items:t,className:n,position:o,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.A)(),{pathname:t}=(0,s.zy)();return t.replace(e,"/")}(),d=se(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,oe.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,a.A)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(te,(0,l.A)({role:"button",className:(0,a.A)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(oe.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(Se,(0,l.A)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function de(e){let{mobile:t=!1,...n}=e;const a=t?ce:ue;return r.createElement(a,n)}var fe=n(577);function pe(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.A)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const me="iconLanguage_kvP7";var ge=n(6712);const he={searchBox:"searchBox_WqAV"};function be(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.A)(n,he.searchBox)},t)}var ve=n(4548),ye=n(8600);var we=n(3947);const ke=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.A)(),f=(0,fe.o)(),{search:p,hash:m}=(0,s.zy)(),g=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],h=t?(0,u.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(de,(0,l.A)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(pe,{className:me}),h),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(be,{className:n},r.createElement(ge.A,null))},dropdown:de,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.A)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ve.zK)(a),s=(0,ye.QB)(t,a);return null===s?null:r.createElement(ae,(0,l.A)({exact:!0},o,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ve.zK)(a),s=(0,ye.fW)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,l.A)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,ye.Vd)(a)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ae,(0,l.A)({},o,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.zy)(),p=(0,ve.zK)(n),m=(0,ve.jh)(n),{savePreferredVersionName:g}=(0,we.g1)(n),h=[...o,...m.map((e=>{const t=p.alternateDocVersions[e.name]??ke(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...i],b=(0,ye.Vd)(n)[0],v=t&&h.length>1?(0,u.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&h.length>1?void 0:ke(b).path;return h.length<=1?r.createElement(ae,(0,l.A)({},c,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(de,(0,l.A)({},c,{mobile:t,label:v,to:y,items:h,isActive:a?()=>!1:void 0}))}};function Se(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ee[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function xe(){const e=(0,L.M)(),t=(0,w.p)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Se,(0,l.A)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ce(e){return r.createElement("button",(0,l.A)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Ae(){const e=0===(0,w.p)().navbar.items.length,t=M();return r.createElement(r.Fragment,null,!e&&r.createElement(Ce,{onClick:()=>t.hide()}),t.content)}function Te(){const e=(0,L.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(j,{header:r.createElement(Q,null),primaryMenu:r.createElement(xe,null),secondaryMenu:r.createElement(Ae,null)}):null}const _e={navbarHideable:"navbarHideable_hhpl",navbarHidden:"navbarHidden_nmcs"};function Le(e){return r.createElement("div",(0,l.A)({role:"presentation"},e,{className:(0,a.A)("navbar-sidebar__backdrop",e.className)}))}function Re(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.p)(),i=(0,L.M)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,R.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,className:(0,a.A)("navbar","navbar--fixed-top",n&&[_e.navbarHideable,!s&&_e.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Le,{onClick:i.toggle}),r.createElement(Te,null))}const Ne="right";function Pe(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.A)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Oe(){const{toggle:e,shown:t}=(0,L.M)();return r.createElement("button",{onClick:e,"aria-label":(0,u.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Pe,null))}const De={colorModeToggle:"colorModeToggle_Hewu"};function Ie(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Se,(0,l.A)({},e,{key:t})))))}function Me(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function je(){const e=(0,L.M)(),t=(0,w.p)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??Ne)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(Me,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Oe,null),r.createElement(W,null),r.createElement(Ie,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ie,{items:a}),r.createElement(H,{className:De.colorModeToggle}),!o&&r.createElement(be,null,r.createElement(ge.A,null)))})}function Fe(){return r.createElement(Re,null,r.createElement(je,null))}function Be(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,u=(0,X.A)(n),c=(0,X.A)(a,{forcePrependBaseUrl:!0});return r.createElement(Y.A,(0,l.A)({className:"footer__link-item"},a?{href:i?c:a}:{to:u},s),o,a&&!(0,J.A)(a)&&r.createElement(ee.A,null))}function ze(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Be,{item:t}))}function $e(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(ze,{key:t,item:e})))))}function Ue(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement($e,{key:t,column:e}))))}function qe(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ge(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Be,{item:t})}function He(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ge,{item:e}),t.length!==n+1&&r.createElement(qe,null))))))}function Ve(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(Ue,{columns:t}):r.createElement(He,{links:t})}var We=n(6555);const Ke={footerLogoLink:"footerLogoLink_tutC"};function Qe(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.h)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(We.A,{className:(0,a.A)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function Ye(e){let{logo:t}=e;return t.href?r.createElement(Y.A,{href:t.href,className:Ke.footerLogoLink,target:t.target},r.createElement(Qe,{logo:t})):r.createElement(Qe,{logo:t})}function Xe(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Je(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.A)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function Ze(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(Je,{style:o,links:n&&n.length>0&&r.createElement(Ve,{links:n}),logo:a&&r.createElement(Ye,{logo:a}),copyright:t&&r.createElement(Xe,{copyright:t})})}const et=r.memo(Ze);var tt=n(6594);const nt=(0,N.fM)([F.a,k.oq,tt.B,R.Tv,we.VQ,i.Jx,function(e){let{children:t}=e;return r.createElement(P.y_,null,r.createElement(L.e,null,r.createElement(D,null,t)))}]);function rt(e){let{children:t}=e;return r.createElement(nt,null,t)}function at(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("p",null,t.message),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},r.createElement(u.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again when the page crashed"},"Try again"))))))}const ot={mainWrapper:"mainWrapper_MB5r"};function it(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,b.J)(),r.createElement(rt,null,r.createElement(i.be,{title:s,description:u}),r.createElement(y,null),r.createElement(_,null),r.createElement(Fe,null),r.createElement("div",{id:d,className:(0,a.A)(h.G.wrapper.main,ot.mainWrapper,l)},r.createElement(o.A,{fallback:e=>r.createElement(at,e)},t)),!n&&r.createElement(et,null))}},699:(e,t,n)=>{"use strict";n.d(t,{A:()=>d});var r=n(8102),a=n(3696),o=n(1611),i=n(883),l=n(7032),s=n(7412),u=n(6555);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.A)(t.src),dark:(0,i.A)(t.srcDark||t.src)},l=a.createElement(u.A,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.A)(),{navbar:{title:n,logo:u}}=(0,s.p)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.A)(u?.href||"/"),g=n?"":t,h=u?.alt??g;return a.createElement(o.A,(0,r.A)({to:m},p,u?.target&&{target:u.target}),u&&a.createElement(c,{logo:u,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:f},n))}},689:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(3696),a=n(7854);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.A,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},6555:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});var r=n(8102),a=n(3696),o=n(8017),i=n(6681),l=n(2363);const s={themedImage:"themedImage_BQGR","themedImage--light":"themedImage--light_HAxW","themedImage--dark":"themedImage--dark_bGx0"};function u(e){const t=(0,i.A)(),{colorMode:n}=(0,l.G)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.A)({key:e,src:u[e],alt:d,className:(0,o.A)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},51:(e,t,n)=>{"use strict";n.d(t,{N:()=>g,u:()=>l});var r=n(8102),a=n(3696),o=n(6655);const i="ease-in-out";function l(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const s={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function c(e,t){const n=t?s:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function d(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??i}`,height:`${t}px`}}function l(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return c(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=s.height,e.style.overflow=s.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!o.A.canUseDOM)return e?s:u}function p(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,a.useRef)(null);return d({collapsibleRef:u,collapsed:n,animation:o}),a.createElement(t,{ref:u,style:s?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(c(u.current,n),i?.(n))},className:l},r)}function m(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(p,(0,r.A)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?m:p;return a.createElement(r,n)}},3043:(e,t,n)=>{"use strict";n.d(t,{Mj:()=>m,oq:()=>p});var r=n(3696),a=n(6681),o=n(8708),i=n(5198),l=n(7412);const s=(0,o.W)("docusaurus.announcement.dismiss"),u=(0,o.W)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.p)(),t=(0,a.A)(),[n,o]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{o(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},2363:(e,t,n)=>{"use strict";n.d(t,{G:()=>h,a:()=>g});var r=n(3696),a=n(6655),o=n(5198),i=n(8708),l=n(7412);const s=r.createContext(void 0),u="theme",c=(0,i.W)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>a.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.p)(),[a,o]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(s.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(s);if(null==e)throw new o.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},3947:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>h,g1:()=>v});var r=n(3696),a=n(4548),o=n(8287),i=n(7412),l=n(8600),s=n(5198),u=n(8708);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.W)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.W)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.W)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,a.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function h(e){let{children:t}=e;return l.C5?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(p);if(!e)throw new s.dV("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.W);const t=(0,a.ht)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},4382:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,t:()=>s});var r=n(3696),a=n(5198);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.dV("DocsSidebarProvider");return e}},7294:(e,t,n)=>{"use strict";n.d(t,{n:()=>i,r:()=>l});var r=n(3696),a=n(5198);const o=r.createContext(null);function i(e){let{children:t,version:n}=e;return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(null===e)throw new a.dV("DocsVersionProvider");return e}},5974:(e,t,n)=>{"use strict";n.d(t,{e:()=>f,M:()=>p});var r=n(3696),a=n(5454),o=n(2575),i=n(9519),l=n(5198);function s(e){!function(e){const t=(0,i.W6)(),n=(0,l._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(7412);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,a.YL)(),{items:t}=(0,u.p)().navbar;return 0===t.length&&!e.component}(),t=(0,o.l)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function f(e){let{children:t}=e;const n=d();return r.createElement(c.Provider,{value:n},t)}function p(){const e=r.useContext(c);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},5454:(e,t,n)=>{"use strict";n.d(t,{GX:()=>s,YL:()=>l,y_:()=>i});var r=n(3696),a=n(5198);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.dV("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.dV("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Be)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},6594:(e,t,n)=>{"use strict";n.d(t,{B:()=>s,x:()=>u});var r=n(3696),a=n(8708),o=n(5198);const i="docusaurus.tab.",l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const[e,t]=(0,r.useState)({}),n=(0,r.useCallback)(((e,t)=>{(0,a.W)(`${i}${e}`).set(t)}),[]);(0,r.useEffect)((()=>{try{const e={};(0,a.E)().forEach((t=>{if(t.startsWith(i)){const n=t.substring(i.length);e[n]=(0,a.W)(t).get()}})),t(e)}catch(e){console.error(e)}}),[]);const o=(0,r.useCallback)(((e,r)=>{t((t=>({...t,[e]:r}))),n(e,r)}),[n]);return(0,r.useMemo)((()=>({tabGroupChoices:e,setTabGroupChoices:o})),[e,o])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new o.dV("TabGroupChoiceProvider");return e}},9984:(e,t,n)=>{"use strict";n.d(t,{w:()=>a,J:()=>o});var r=n(3696);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},2575:(e,t,n)=>{"use strict";n.d(t,{l:()=>u});var r=n(3696),a=n(6655);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.A.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},3237:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},8600:(e,t,n)=>{"use strict";n.d(t,{$S:()=>g,C5:()=>f,OF:()=>w,QB:()=>S,Vd:()=>k,_o:()=>m,cC:()=>p,d1:()=>C,fW:()=>E,mz:()=>x,w8:()=>v});var r=n(3696),a=n(9519),o=n(3971),i=n(4548),l=n(3947),s=n(7294),u=n(4382),c=n(4544),d=n(4379);const f=!!i.Gy;function p(e){const t=(0,s.r)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=m(t);if(e)return e}}}function g(){const{pathname:e}=(0,a.zy)(),t=(0,u.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=y({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.ys)(e,t),b=(e,t)=>e.some((e=>v(e,t)));function v(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||b(e.items,t))}function y(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.ys)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.ys)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function w(){const e=(0,u.t)(),{pathname:t}=(0,a.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?y({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,l.g1)(e),a=(0,i.r7)(e);return(0,r.useMemo)((()=>(0,c.s)([t,n,a].filter(Boolean))),[t,n,a])}function E(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\n Available sidebar ids are:\n - ${Object.keys(t).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`DocNavbarItem: couldn't find any doc with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,c.s)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function x(e){let{route:t,versionMetadata:n}=e;const r=(0,a.zy)(),i=t.routes,l=i.find((e=>(0,a.B6)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.v)(i),sidebarName:s,sidebarItems:u}}function C(e){return e.filter((e=>"category"!==e.type||!!m(e)))}},4544:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{X:()=>r,s:()=>a})},5605:(e,t,n)=>{"use strict";n.d(t,{e3:()=>f,be:()=>c,Jx:()=>p});var r=n(3696),a=n(8017),o=n(7854),i=n(580);function l(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(883),u=n(7032);function c(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.h)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.A,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.A)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.A,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.A)(o,i)},t)}},5198:(e,t,n)=>{"use strict";n.d(t,{Be:()=>s,ZC:()=>i,_q:()=>o,dV:()=>l,fM:()=>u});var r=n(3696);const a=n(6655).A.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},4379:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>l,ys:()=>i});var r=n(3696),a=n(7577),o=n(7032);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.A,baseUrl:e})),[e])}},766:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>d,Tv:()=>s,a_:()=>f,gk:()=>p});var r=n(3696),a=n(6655),o=n(6681),i=n(5198);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const c=()=>a.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),a=(0,r.useRef)(c()),o=(0,i._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=u(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{n.current?.()})),{blockElementScrollPositionUntilNextRender:a}}function p(){const e=(0,r.useRef)(null),t=(0,o.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},8721:(e,t,n)=>{"use strict";n.d(t,{Cy:()=>r,tU:()=>a});n(7032);const r="default";function a(e,t){return`docs-${e}-${t}`}},8708:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,W:()=>l});const r="localStorage";function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,o||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),o=!0),null}var t}let o=!1;const i={get:()=>null,set:()=>{},del:()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t}}(e);const n=a(t?.persistence);return null===n?i:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{n.setItem(e,t)}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{n.removeItem(e)}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}}}}function s(e){void 0===e&&(e=r);const t=a(e);if(!t)return[];const n=[];for(let r=0;r{"use strict";n.d(t,{o:()=>o});var r=n(7032),a=n(9519);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.A)(),{pathname:i}=(0,a.zy)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},2432:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(3696),a=n(9519),o=n(5198);function i(e){const t=(0,a.zy)(),n=(0,o.ZC)(t),i=(0,o._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},7412:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(7032);function a(){return(0,r.A)().siteConfig.themeConfig}},69:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},5994:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="post-content";var a=n(69);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}})},7577:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(3696),a=n(8102),o=n(7303),i=n.n(o),l=n(4054);const s={"01c27ace":[()=>n.e(377).then(n.bind(n,6457)),"@site/../docs/eslint-base/collections.md",6457],17896441:[()=>Promise.all([n.e(869),n.e(401)]).then(n.bind(n,7827)),"@theme/DocItem",7827],"1be78505":[()=>Promise.all([n.e(869),n.e(714)]).then(n.bind(n,7452)),"@theme/DocPage",7452],"2bc78064":[()=>n.e(575).then(n.bind(n,1306)),"@site/../docs/typescript/type-checked.md",1306],"374a3bb4":[()=>Promise.all([n.e(869),n.e(837)]).then(n.bind(n,2860)),"@site/../docs/typescript/index.md",2860],"3c9c65c3":[()=>n.e(480).then(n.bind(n,3284)),"@site/../docs/eslint-base/variables-names.md",3284],"4f9f7239":[()=>n.e(831).then(n.t.bind(n,1966,19)),"/home/runner/work/js-style-guide/js-style-guide/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",1966],"5b478ae0":[()=>n.e(375).then(n.bind(n,8942)),"@site/../docs/eslint-base/control-flow.md",8942],"935f2afb":[()=>n.e(581).then(n.t.bind(n,5610,19)),"~docs/default/version-current-metadata-prop-751.json",5610],b7550edf:[()=>n.e(979).then(n.bind(n,8381)),"@site/../docs/eslint-base/modules.md",8381],bfb0a607:[()=>Promise.all([n.e(869),n.e(727)]).then(n.bind(n,7716)),"@site/../docs/eslint-base/index.md",7716],ce13fc4a:[()=>n.e(215).then(n.bind(n,4801)),"@site/../docs/eslint-base/operators.md",4801],d3bef8cd:[()=>n.e(296).then(n.bind(n,9931)),"@site/../docs/typescript/base.md",9931],db113458:[()=>n.e(853).then(n.bind(n,817)),"@site/../docs/eslint-base/formatting.md",817],dea8086e:[()=>n.e(114).then(n.bind(n,3320)),"@site/../docs/eslint-base/async.md",3320],e82d795c:[()=>n.e(346).then(n.bind(n,6481)),"@site/../docs/eslint-base/functions.md",6481],ec400d68:[()=>n.e(709).then(n.bind(n,8306)),"@site/../docs/eslint-base/literals.md",8306],edaa7221:[()=>n.e(582).then(n.bind(n,1913)),"@site/../docs/eslint-base/objects-classes.md",1913],f41ee608:[()=>Promise.all([n.e(869),n.e(310)]).then(n.bind(n,890)),"@site/../docs/guide.md",890]};function u(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(7991),d=n(580);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(840).then(n.bind(n,1840)),modules:["@theme/NotFound"],webpack:()=>[1840],render(e,t){const n=e.default;return r.createElement(d.W,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],g=(0,c.A)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.W,{value:s},r.createElement(l,(0,a.A)({},i,n)))}})}const p=[{path:"/js-style-guide/",component:f("/js-style-guide/","a6c"),routes:[{path:"/js-style-guide/",component:f("/js-style-guide/","cf2"),exact:!0,sidebar:"defaultSidebar"},{path:"/js-style-guide/eslint-base/",component:f("/js-style-guide/eslint-base/","dc1"),exact:!0,sidebar:"defaultSidebar"},{path:"/js-style-guide/eslint-base/async",component:f("/js-style-guide/eslint-base/async","2bc"),exact:!0,sidebar:"defaultSidebar"},{path:"/js-style-guide/eslint-base/collections",component:f("/js-style-guide/eslint-base/collections","3ce"),exact:!0,sidebar:"defaultSidebar"},{path:"/js-style-guide/eslint-base/control-flow",component:f("/js-style-guide/eslint-base/control-flow","122"),exact:!0,sidebar:"defaultSidebar"},{path:"/js-style-guide/eslint-base/formatting",component:f("/js-style-guide/eslint-base/formatting","b9b"),exact:!0,sidebar:"defaultSidebar"},{path:"/js-style-guide/eslint-base/functions",component:f("/js-style-guide/eslint-base/functions","215"),exact:!0,sidebar:"defaultSidebar"},{path:"/js-style-guide/eslint-base/literals",component:f("/js-style-guide/eslint-base/literals","82e"),exact:!0,sidebar:"defaultSidebar"},{path:"/js-style-guide/eslint-base/modules",component:f("/js-style-guide/eslint-base/modules","045"),exact:!0,sidebar:"defaultSidebar"},{path:"/js-style-guide/eslint-base/objects-classes",component:f("/js-style-guide/eslint-base/objects-classes","0a8"),exact:!0,sidebar:"defaultSidebar"},{path:"/js-style-guide/eslint-base/operators",component:f("/js-style-guide/eslint-base/operators","eb5"),exact:!0,sidebar:"defaultSidebar"},{path:"/js-style-guide/eslint-base/variables-names",component:f("/js-style-guide/eslint-base/variables-names","0ce"),exact:!0,sidebar:"defaultSidebar"},{path:"/js-style-guide/typescript/",component:f("/js-style-guide/typescript/","f5c"),exact:!0,sidebar:"defaultSidebar"},{path:"/js-style-guide/typescript/base",component:f("/js-style-guide/typescript/base","6e4"),exact:!0,sidebar:"defaultSidebar"},{path:"/js-style-guide/typescript/type-checked",component:f("/js-style-guide/typescript/type-checked","0f1"),exact:!0,sidebar:"defaultSidebar"}]},{path:"*",component:f("*")}]},8017:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{zR:()=>w,TM:()=>A,yJ:()=>p,sC:()=>_,AO:()=>f});var r=n(8102);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(6143);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.A)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(4271),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},9869:(e,t,n)=>{"use strict";n.r(t)},7729:(e,t,n)=>{"use strict";n.r(t)},7671:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},1069:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},5558:(e,t,n)=>{const r=n(1069),a=n(904),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(1441).resolve(t)],delete Prism.languages[e],n(1441)(t),o.add(e)}))}i.silent=!1,e.exports=i},1441:(e,t,n)=>{var r={"./":5558};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=1441},904:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in a(t,o),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var f,p=r(s),m=c;a(m);){for(var g in f={},m){var h=s[g];t(h&&h.modify,(function(e){e in d&&(f[e]=!0)}))}for(var b in d)if(!(b in c))for(var v in p(b))if(v in c){f[b]=!0;break}for(var y in m=f)c[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var a,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)a=r(e);else{var f=i(c.map((function(e){var t=u(e);return delete s[e],t})));o?a=o(f,(function(){return r(e)})):r(e)}return l[e]=a}for(var c in n)u(c);var d=[];for(var f in s)d.push(l[f]);return i(d)}(p,c,t,n)}};return w}}();e.exports=t},362:(e,t,n)=>{"use strict";var r=n(6441);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},2688:(e,t,n)=>{e.exports=n(362)()},6441:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},6067:(e,t,n)=>{"use strict";var r=n(3696),a=n(1434);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n