<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>JS with Types</title>
  <subtitle>A reference for type-checked JavaScript: JSDoc comments checked by TypeScript through a jsconfig.json, with examples run through tsc.</subtitle>
  <id>https://jswithtypes.com/</id>
  <link rel="self" type="application/atom+xml" href="https://jswithtypes.com/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://jswithtypes.com/"/>
  <updated>2026-10-21T00:00:00Z</updated>
  <author><name>JS with Types</name><uri>https://jswithtypes.com/</uri></author>
  <icon>https://jswithtypes.com/icon-192.png</icon>
  <rights>Text: CC BY 4.0, JS with Types (jswithtypes.com)</rights>
  <entry>
    <title>A JSDoc style guide for type-checked JavaScript</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/guides/jsdoc-style-guide/"/>
    <id>https://jswithtypes.com/guides/jsdoc-style-guide/</id>
    <published>2026-10-21T00:00:00Z</published>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Guide"/>
    <summary>House rules for JSDoc that TypeScript checks: one comment style, where @typedefs live, naming, @import, @satisfies over casts, and Prettier settings.</summary>
  </entry>
  <entry>
    <title>Checking JavaScript in CI</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/guides/check-javascript-in-ci/"/>
    <id>https://jswithtypes.com/guides/check-javascript-in-ci/</id>
    <published>2026-10-21T00:00:00Z</published>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Guide"/>
    <summary>Run tsc on every pull request: a GitHub Actions workflow, caching, monorepos, a pre-commit hook, and failing only on new errors with a baseline file.</summary>
  </entry>
  <entry>
    <title>Checking JavaScript in Node.js, Deno and Bun</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/compare/node-deno-bun/"/>
    <id>https://jswithtypes.com/compare/node-deno-bun/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Comparison"/>
    <summary>What each runtime checks before and while it runs your JavaScript, which config each reads, and the commands, with one sample file checked by tsc.</summary>
  </entry>
  <entry>
    <title>Choosing a strictness level for checked JavaScript</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/guides/choose-a-strictness-level/"/>
    <id>https://jswithtypes.com/guides/choose-a-strictness-level/</id>
    <published>2026-10-21T00:00:00Z</published>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Guide"/>
    <summary>Relaxed, recommended or strict: what each level of jsconfig.json strictness catches, what it costs in an existing codebase, and an order to turn options on.</summary>
  </entry>
  <entry>
    <title>How do I add a property to a type from another package?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/augment-a-package-type/"/>
    <id>https://jswithtypes.com/recipes/augment-a-package-type/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Module augmentation for checked JavaScript: add req.user to Express's Request in a .d.ts with declare global, so middleware and handlers agree on it.</summary>
  </entry>
  <entry>
    <title>How do I add types for an npm package that has none?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/types-for-an-untyped-package/"/>
    <id>https://jswithtypes.com/recipes/types-for-an-untyped-package/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Write a local .d.ts with declare module for a dependency that ships no types, so checked JavaScript gets real types instead of TS7016 or any.</summary>
  </entry>
  <entry>
    <title>How do I check a config object without losing its literal types?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/satisfies-config-object/"/>
    <id>https://jswithtypes.com/recipes/satisfies-config-object/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Use JSDoc @satisfies (TypeScript 5.0+) on a config object: tsc checks it against a type while keeping its own keys and literal values for later use.</summary>
  </entry>
  <entry>
    <title>How do I create .d.ts files from my JavaScript with tsc?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/write-dts-from-javascript/"/>
    <id>https://jswithtypes.com/recipes/write-dts-from-javascript/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Let tsc write .d.ts files from JSDoc-typed JavaScript with a second config, jsconfig.types.json: declaration, emitDeclarationOnly, declarationDir.</summary>
  </entry>
  <entry>
    <title>How do I declare a global variable or add a property to window?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/declare-globals/"/>
    <id>https://jswithtypes.com/recipes/declare-globals/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Declare globals for checked JavaScript in a .d.ts file: window.dataLayer through the Window interface, and constants a bundler injects, with declare global.</summary>
  </entry>
  <entry>
    <title>How do I import a JSON file in checked JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/import-json-files/"/>
    <id>https://jswithtypes.com/recipes/import-json-files/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Import a JSON file in a Node.js ES module with with { type: &quot;json&quot; }; tsc types it from the file. Fix TS1543, TS1544 and resolveJsonModule settings.</summary>
  </entry>
  <entry>
    <title>How do I import and re-export types between JavaScript files?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/import-and-reexport-types/"/>
    <id>https://jswithtypes.com/recipes/import-and-reexport-types/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Share @typedef types between JavaScript files with @import (TypeScript 5.5+) or import() types, re-export them from one module, and fix TS18042.</summary>
  </entry>
  <entry>
    <title>How do I make a JavaScript class implement an interface?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/implements-an-interface/"/>
    <id>https://jswithtypes.com/recipes/implements-an-interface/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Use @implements in checked JavaScript to make a class promise the shape of a @typedef, so tsc reports missing methods and wrong signatures in the class.</summary>
  </entry>
  <entry>
    <title>How do I mark a parameter as optional in JSDoc?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/optional-and-default-parameters/"/>
    <id>https://jswithtypes.com/recipes/optional-and-default-parameters/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Optional and default parameters in JSDoc: square brackets in @param, JavaScript defaults, and what tsc reports when a caller or the function gets it wrong.</summary>
  </entry>
  <entry>
    <title>How do I narrow a union of object types in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/discriminated-unions/"/>
    <id>https://jswithtypes.com/recipes/discriminated-unions/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Write a discriminated union in JSDoc with a shared kind property, narrow it with switch or if, and make tsc report any case you forget to handle.</summary>
  </entry>
  <entry>
    <title>How do I publish a JavaScript package with types?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/publish-a-typed-package/"/>
    <id>https://jswithtypes.com/recipes/publish-a-typed-package/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Ship .d.ts files with a JavaScript package: point the types condition of exports at them, list them in files, and check the result from a consumer project.</summary>
  </entry>
  <entry>
    <title>How do I return a tuple from a JavaScript function?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/return-a-tuple/"/>
    <id>https://jswithtypes.com/recipes/return-a-tuple/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Return a tuple from a checked JavaScript function with @returns {[inStock: boolean, quantity: number]}, or a const cast, so destructuring keeps each type.</summary>
  </entry>
  <entry>
    <title>How do I type &quot;this&quot; inside a JavaScript function?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/this-in-functions/"/>
    <id>https://jswithtypes.com/recipes/this-in-functions/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Tell tsc what this is in a plain JavaScript function with the JSDoc @this tag, and fix TS2683 (this implicitly has type any) and TS2684 at the call.</summary>
  </entry>
  <entry>
    <title>How do I type a callback parameter in JSDoc?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/callback-parameters/"/>
    <id>https://jswithtypes.com/recipes/callback-parameters/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type callback parameters in JSDoc with @callback or an inline arrow type, so tsc checks the callback's arguments and its return value in plain JavaScript.</summary>
  </entry>
  <entry>
    <title>How do I type a CLI's options with util.parseArgs?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/cli-options-with-parseargs/"/>
    <id>https://jswithtypes.com/recipes/cli-options-with-parseargs/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Use util.parseArgs in checked JavaScript: options typed from the config object, values that may be missing, and why a config built apart loses its types.</summary>
  </entry>
  <entry>
    <title>How do I type a Cloudflare Workers fetch handler and its bindings in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/cloudflare-fetch-handler/"/>
    <id>https://jswithtypes.com/recipes/cloudflare-fetch-handler/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Check a fetch handler in plain JavaScript with @satisfies {ExportedHandler&lt;Env&gt;} and a @typedef for the bindings in wrangler.jsonc, so tsc checks env.</summary>
  </entry>
  <entry>
    <title>How do I type a custom element (Web Component) in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/web-components/"/>
    <id>https://jswithtypes.com/recipes/web-components/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type a custom element class in checked JavaScript and register its tag in HTMLElementTagNameMap, so querySelector and createElement return your class.</summary>
  </entry>
  <entry>
    <title>How do I type a dynamic import() in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/dynamic-import/"/>
    <id>https://jswithtypes.com/recipes/dynamic-import/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>A dynamic import() in checked JavaScript is typed from the module it loads. Type a lazily loaded module variable with typeof import(), and fix TS2835.</summary>
  </entry>
  <entry>
    <title>How do I type a function that also has properties?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/functions-with-properties/"/>
    <id>https://jswithtypes.com/recipes/functions-with-properties/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type a JavaScript function that carries properties (formatPrice.symbol): assignments after the function, a @type on the first one, or a call signature type.</summary>
  </entry>
  <entry>
    <title>How do I type a Map or a Set in JSDoc?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/map-and-set/"/>
    <id>https://jswithtypes.com/recipes/map-and-set/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type a Map or Set in checked JavaScript with @type {Map&lt;string, Product&gt;}, why an empty new Map() is any, and why get() can return undefined.</summary>
  </entry>
  <entry>
    <title>How do I type a mixin in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/mixins/"/>
    <id>https://jswithtypes.com/recipes/mixins/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type a class mixin in checked JavaScript with @template over a constructor type, so the mixed class keeps the base class's members and adds its own.</summary>
  </entry>
  <entry>
    <title>How do I type a Node.js EventEmitter's events in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/typed-event-emitter/"/>
    <id>https://jswithtypes.com/recipes/typed-event-emitter/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Give an EventEmitter an event map with @extends in checked JavaScript, so emit() and on() check event names and their arguments.</summary>
  </entry>
  <entry>
    <title>How do I type a reducer and its actions in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/reducer-and-actions/"/>
    <id>https://jswithtypes.com/recipes/reducer-and-actions/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type a reducer in checked JavaScript: the state as a @typedef, the actions as a union keyed by type, so each case knows its payload and bad dispatches fail.</summary>
  </entry>
  <entry>
    <title>How do I type a subclass in JavaScript with @extends and @override?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/subclasses-and-overrides/"/>
    <id>https://jswithtypes.com/recipes/subclasses-and-overrides/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Subclasses in checked JavaScript: extends does the typing, @extends supplies a generic base's type argument, and @override marks overrides tsc can verify.</summary>
  </entry>
  <entry>
    <title>How do I type an async generator in JSDoc?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/async-generators/"/>
    <id>https://jswithtypes.com/recipes/async-generators/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type async generators and async iterators in checked JavaScript with @returns {AsyncGenerator&lt;T, void, undefined&gt;}, and loop over them with for await.</summary>
  </entry>
  <entry>
    <title>How do I type an Express handler in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/type-an-express-handler/"/>
    <id>https://jswithtypes.com/recipes/type-an-express-handler/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type Express route handlers in plain JavaScript with JSDoc and @types/express: route parameters, request bodies and error handlers, checked by tsc.</summary>
  </entry>
  <entry>
    <title>How do I type an object whose keys are a fixed set of strings?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/record-keyed-by-a-union/"/>
    <id>https://jswithtypes.com/recipes/record-keyed-by-a-union/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type a lookup object keyed by a union of strings with Record&lt;Status, T&gt; in JSDoc, so tsc reports a missing key, an unknown key and a wrong value.</summary>
  </entry>
  <entry>
    <title>How do I type an options object with default values in JSDoc?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/options-object-with-defaults/"/>
    <id>https://jswithtypes.com/recipes/options-object-with-defaults/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type an options parameter in JSDoc with a @typedef of optional properties, defaults by destructuring or spread, and the typos and values tsc catches.</summary>
  </entry>
  <entry>
    <title>How do I type Buffers and Uint8Arrays in JSDoc?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/buffers-and-typed-arrays/"/>
    <id>https://jswithtypes.com/recipes/buffers-and-typed-arrays/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Accept bytes as Uint8Array in checked JavaScript, so functions take Node.js Buffers and browser data alike, and avoid Buffer-only methods tsc will flag.</summary>
  </entry>
  <entry>
    <title>How do I type child_process results in Node.js JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/child-process/"/>
    <id>https://jswithtypes.com/recipes/child-process/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Checked JavaScript with node:child_process: promisify(execFile) gives typed stdout and stderr, spawn's streams depend on stdio, and exit codes can be null.</summary>
  </entry>
  <entry>
    <title>How do I type class fields and the constructor in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/class-fields-and-constructors/"/>
    <id>https://jswithtypes.com/recipes/class-fields-and-constructors/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type class fields in checked JavaScript: @type on field declarations, constructor parameters with @param, and the TS7008, TS2564 and null traps.</summary>
  </entry>
  <entry>
    <title>How do I type document.querySelector results in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/dom-query-selector/"/>
    <id>https://jswithtypes.com/recipes/dom-query-selector/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>querySelector returns Element | null. Narrow it in checked JavaScript with instanceof, tag-name selectors or a JSDoc cast, and fix TS18047 and TS2339.</summary>
  </entry>
  <entry>
    <title>How do I type event handlers and addEventListener in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/dom-event-listeners/"/>
    <id>https://jswithtypes.com/recipes/dom-event-listeners/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>addEventListener types the event from its name. Use the element from the closure, not event.target, and fix TS18047, TS2339 and TS2345 in checked JavaScript.</summary>
  </entry>
  <entry>
    <title>How do I type Express middleware and error handlers in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/express-middleware/"/>
    <id>https://jswithtypes.com/recipes/express-middleware/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type Express middleware in checked JavaScript: RequestHandler for middleware and factories, res.locals via its fifth type parameter, and ErrorRequestHandler.</summary>
  </entry>
  <entry>
    <title>How do I type getters and setters in a JavaScript class?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/getters-and-setters/"/>
    <id>https://jswithtypes.com/recipes/getters-and-setters/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type get and set accessors in checked JavaScript: @returns on the getter, @param on the setter, a setter that accepts more types, and read-only getters.</summary>
  </entry>
  <entry>
    <title>How do I type module.exports and require() in CommonJS JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/commonjs-and-esm-exports/"/>
    <id>https://jswithtypes.com/recipes/commonjs-and-esm-exports/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Checked CommonJS: tsc types module.exports and require() from your JSDoc, shares typedefs with import() types, and catches names a module does not export.</summary>
  </entry>
  <entry>
    <title>How do I type Node.js fs callbacks and fs/promises in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/node-fs-callbacks-and-promises/"/>
    <id>https://jswithtypes.com/recipes/node-fs-callbacks-and-promises/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Checked JavaScript with node:fs: error-first callbacks typed by @types/node, fs/promises with await, the encoding that turns a Buffer into a string.</summary>
  </entry>
  <entry>
    <title>How do I type Node.js streams in checked JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/node-streams/"/>
    <id>https://jswithtypes.com/recipes/node-streams/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type stream code in checked JavaScript: readline's line iterator, pipeline() with an async generator, and chunks, which arrive as any until you type them.</summary>
  </entry>
  <entry>
    <title>How do I type process.env variables in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/environment-variables/"/>
    <id>https://jswithtypes.com/recipes/environment-variables/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>process.env values are string | undefined. Read each variable once in a checked config module, or declare them on NodeJS.ProcessEnv in a .d.ts file.</summary>
  </entry>
  <entry>
    <title>How do I type React component props in a .jsx file?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/react-components-in-jsx/"/>
    <id>https://jswithtypes.com/recipes/react-components-in-jsx/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type React props in plain .jsx files with a @typedef and @param, so tsc checks every use of the component, its state and its handlers, with @types/react.</summary>
  </entry>
  <entry>
    <title>How do I type rest parameters (...args) in JSDoc?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/rest-parameters/"/>
    <id>https://jswithtypes.com/recipes/rest-parameters/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type a rest parameter in JSDoc with @param {...number} or an array type, spread arrays into calls, and fix TS2345 and TS2556 in checked JavaScript.</summary>
  </entry>
  <entry>
    <title>How do I type static properties and methods in a JavaScript class?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/static-members/"/>
    <id>https://jswithtypes.com/recipes/static-members/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Static fields, private static fields and static factory methods in checked JavaScript: how tsc types them, and the TS2576 you get from an instance.</summary>
  </entry>
  <entry>
    <title>How do I type Svelte component props in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/svelte-components/"/>
    <id>https://jswithtypes.com/recipes/svelte-components/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type Svelte 5 props in a JavaScript component with a @type on the $props() destructuring; svelte-check reads it, and tsc checks the shared .js modules.</summary>
  </entry>
  <entry>
    <title>How do I type the JSON from a fetch response in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/fetch-json-response/"/>
    <id>https://jswithtypes.com/recipes/fetch-json-response/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>response.json() returns Promise&lt;any&gt;. Check response.ok, then annotate the parsed body with @type, or parse into unknown and narrow it, in checked JavaScript.</summary>
  </entry>
  <entry>
    <title>How do I type the result of JSON.parse in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/json-parse-results/"/>
    <id>https://jswithtypes.com/recipes/json-parse-results/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>JSON.parse returns any. Type its result in checked JavaScript: parse into unknown and check it, or cast with @type when you trust the source.</summary>
  </entry>
  <entry>
    <title>How do I type the results of Promise.all in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/promise-all/"/>
    <id>https://jswithtypes.com/recipes/promise-all/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Keep each result's type from Promise.all in checked JavaScript: pass the promises as an array literal, and narrow Promise.allSettled results by status.</summary>
  </entry>
  <entry>
    <title>How do I type values from localStorage in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/local-storage/"/>
    <id>https://jswithtypes.com/recipes/local-storage/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>localStorage holds strings, and getItem can return null. Wrap it in checked JavaScript with a small @template helper that parses JSON and falls back.</summary>
  </entry>
  <entry>
    <title>How do I type WebSocket and EventSource messages in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/websocket-and-eventsource/"/>
    <id>https://jswithtypes.com/recipes/websocket-and-eventsource/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Socket and server-sent event messages arrive as any. Parse them into unknown, narrow them with a type guard over a union, and send only strings or bytes.</summary>
  </entry>
  <entry>
    <title>How do I type what an async function returns in JSDoc?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/async-functions/"/>
    <id>https://jswithtypes.com/recipes/async-functions/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Type an async function's result in JSDoc with @returns {Promise&lt;T&gt;}, and fix TS1064 and the TS2339 you get from a missing await in checked JavaScript.</summary>
  </entry>
  <entry>
    <title>How do I type-check Vitest or Jest test files in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/test-files/"/>
    <id>https://jswithtypes.com/recipes/test-files/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Check JavaScript test files with tsc: import describe and expect from vitest, or list vitest/globals in types; fix TS2593 'Cannot find name describe'.</summary>
  </entry>
  <entry>
    <title>How do I write a generic function in JavaScript with @template?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/generic-functions/"/>
    <id>https://jswithtypes.com/recipes/generic-functions/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Write generic helper functions in plain JavaScript with JSDoc @template: type parameters, constraints with {...}, keyof keys, and the errors tsc reports.</summary>
  </entry>
  <entry>
    <title>How do I write a type guard function in JSDoc?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/type-guards/"/>
    <id>https://jswithtypes.com/recipes/type-guards/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Write a type guard in checked JavaScript with @returns {value is Product}, so a check in one function narrows the value in every caller and in filter.</summary>
  </entry>
  <entry>
    <title>How do I write an assertion function in JSDoc?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/assertion-functions/"/>
    <id>https://jswithtypes.com/recipes/assertion-functions/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Write assert() helpers in checked JavaScript with @returns {asserts value is string}, and fix TS2775 when an assertion is called through an untyped variable.</summary>
  </entry>
  <entry>
    <title>How do I write an enum in JavaScript with JSDoc?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/enums-without-enum/"/>
    <id>https://jswithtypes.com/recipes/enums-without-enum/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>JavaScript has no enum keyword. Use a frozen object for the values and a @typedef of their union, so tsc checks every status your code passes around.</summary>
  </entry>
  <entry>
    <title>How do I write function overloads in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/function-overloads/"/>
    <id>https://jswithtypes.com/recipes/function-overloads/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Declare function overloads in a .js file with JSDoc @overload (TypeScript 5.0 and later), so each call gets the return type that matches its arguments.</summary>
  </entry>
  <entry>
    <title>How TypeScript reads a JavaScript file</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/guides/how-typescript-reads-javascript/"/>
    <id>https://jswithtypes.com/guides/how-typescript-reads-javascript/</id>
    <published>2026-10-21T00:00:00Z</published>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Guide"/>
    <summary>How tsc reads a .js file: types from initializers, this and module.exports assignments, which JSDoc comments count, and what .js allows that .ts does not.</summary>
  </entry>
  <entry>
    <title>jsconfig.json vs tsconfig.json</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/compare/jsconfig-vs-tsconfig/"/>
    <id>https://jswithtypes.com/compare/jsconfig-vs-tsconfig/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Comparison"/>
    <summary>The same file format with different defaults: what a jsconfig.json turns on by itself, how tsc and editors find each file, and when to use which.</summary>
  </entry>
  <entry>
    <title>JSDoc with TypeScript vs Flow</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/compare/jsdoc-vs-flow/"/>
    <id>https://jswithtypes.com/compare/jsdoc-vs-flow/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Comparison"/>
    <summary>Two ways to type JavaScript in comments: TypeScript's checker reading JSDoc, and Flow's comment types. Where each stands today, and how to move from Flow.</summary>
  </entry>
  <entry>
    <title>JSDoc-typed JavaScript vs Node's type stripping</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/compare/jsdoc-vs-node-type-stripping/"/>
    <id>https://jswithtypes.com/compare/jsdoc-vs-node-type-stripping/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Comparison"/>
    <summary>Node.js now runs .ts files by erasing their types. What that changes about the no-build-step argument, what it does not do, and which Node.js versions do it.</summary>
  </entry>
  <entry>
    <title>JSDoc-typed JavaScript vs TypeScript files</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/compare/jsdoc-vs-typescript/"/>
    <id>https://jswithtypes.com/compare/jsdoc-vs-typescript/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Comparison"/>
    <summary>The same checker reads both. What differs is syntax, the build step, and what each can express: a dated comparison with examples checked by tsc.</summary>
  </entry>
  <entry>
    <title>Migrating a JavaScript codebase to checked JavaScript, step by step</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/guides/migrate-a-javascript-codebase/"/>
    <id>https://jswithtypes.com/guides/migrate-a-javascript-codebase/</id>
    <published>2026-10-21T00:00:00Z</published>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Guide"/>
    <summary>Move an existing JavaScript project to type-checked JavaScript one step at a time: per file, per folder, then noImplicitAny and strict, measuring as you go.</summary>
  </entry>
  <entry>
    <title>Reading a TypeScript error message</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/guides/read-a-typescript-error-message/"/>
    <id>https://jswithtypes.com/guides/read-a-typescript-error-message/</id>
    <published>2026-10-21T00:00:00Z</published>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Guide"/>
    <summary>The parts of a tsc error: file, line and column, the TS code, message chains and related locations, and what --pretty and --explainFiles add.</summary>
  </entry>
  <entry>
    <title>Ship types from a JavaScript package</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/guides/ship-types-from-a-javascript-package/"/>
    <id>https://jswithtypes.com/guides/ship-types-from-a-javascript-package/</id>
    <published>2026-10-21T00:00:00Z</published>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Guide"/>
    <summary>Publish a JavaScript package with types: write .d.ts files from JSDoc, point exports at them, check them as a consumer, and keep CommonJS users working.</summary>
  </entry>
  <entry>
    <title>Should I use #private fields or @private in JavaScript?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/private-fields/"/>
    <id>https://jswithtypes.com/recipes/private-fields/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Private class members in checked JavaScript: #private fields that the runtime enforces, the @private JSDoc tag that only tsc enforces, and their errors.</summary>
  </entry>
  <entry>
    <title>The quirks of JSDoc in TypeScript</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/guides/jsdoc-quirks/"/>
    <id>https://jswithtypes.com/guides/jsdoc-quirks/</id>
    <published>2026-10-21T00:00:00Z</published>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Guide"/>
    <summary>The surprises of type-checked JavaScript, each with an example checked by tsc: comments that attach to nothing, tags that do less than they say, loose types.</summary>
  </entry>
  <entry>
    <title>TypeScript 5.9 vs 6.0 vs 7.0 for JavaScript projects</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/compare/typescript-5-9-vs-6-0-vs-7-0/"/>
    <id>https://jswithtypes.com/compare/typescript-5-9-vs-6-0-vs-7-0/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Comparison"/>
    <summary>What changes for checked JavaScript across TypeScript 5.9, 6.0 and the 7.0 native port: defaults, removed options, JSDoc 7.0 drops, speed, and an upgrade path.</summary>
  </entry>
  <entry>
    <title>What type does setTimeout return in JavaScript, Node.js or browser?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/timers/"/>
    <id>https://jswithtypes.com/recipes/timers/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>setTimeout returns a number in browsers and a Timeout object in Node.js. Type timer handles in checked JavaScript with ReturnType&lt;typeof setTimeout&gt;.</summary>
  </entry>
  <entry>
    <title>Who checks JavaScript with JSDoc instead of writing TypeScript</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/guides/who-checks-javascript-with-jsdoc/"/>
    <id>https://jswithtypes.com/guides/who-checks-javascript-with-jsdoc/</id>
    <published>2026-10-21T00:00:00Z</published>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Guide"/>
    <summary>Svelte, SvelteKit, webpack, the unified collective, Lighthouse, Prettier and htmx check .js files with tsc: the evidence in each repository and their reasons.</summary>
  </entry>
  <entry>
    <title>Why does Object.keys return string[], and how do I keep the key type?</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/recipes/object-keys-and-entries/"/>
    <id>https://jswithtypes.com/recipes/object-keys-and-entries/</id>
    <updated>2026-10-21T00:00:00Z</updated>
    <category term="Recipe"/>
    <summary>Object.keys and Object.entries return string keys in TypeScript. Keep the key type in checked JavaScript with a @type cast or a small keysOf helper.</summary>
  </entry>
  <entry>
    <title>Runtime type checks vs static type annotations in JavaScript</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/guides/javascript-runtime-types-vs-annotations/"/>
    <id>https://jswithtypes.com/guides/javascript-runtime-types-vs-annotations/</id>
    <published>2026-10-20T00:00:00Z</published>
    <updated>2026-10-20T00:00:00Z</updated>
    <category term="Guide"/>
    <summary>typeof and instanceof check values while code runs; TypeScript checks JSDoc-typed code before it runs. What each catches, and how they combine.</summary>
  </entry>
  <entry>
    <title>TypeScript 7.0 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/7-0/"/>
    <id>https://jswithtypes.com/typescript/7-0/</id>
    <published>2026-07-08T00:00:00Z</published>
    <updated>2026-07-08T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 7.0, the native port, for JavaScript: builds 8 to 12 times faster, and JSDoc is read like TypeScript, without @enum, @class or Closure types.</summary>
  </entry>
  <entry>
    <title>TypeScript 6.0 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/6-0/"/>
    <id>https://jswithtypes.com/typescript/6-0/</id>
    <published>2026-03-23T00:00:00Z</published>
    <updated>2026-03-23T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 6.0 for JavaScript: strict on and types empty by default, baseUrl and moduleResolution node deprecated, and the step before 7.0.</summary>
  </entry>
  <entry>
    <title>TypeScript 5.9 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/5-9/"/>
    <id>https://jswithtypes.com/typescript/5-9/</id>
    <published>2025-08-01T00:00:00Z</published>
    <updated>2025-08-01T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 5.9 for checked JavaScript: a shorter tsc --init, import defer, module node20, and a Uint8Array is no longer an ArrayBuffer.</summary>
  </entry>
  <entry>
    <title>TypeScript 5.8 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/5-8/"/>
    <id>https://jswithtypes.com/typescript/5-8/</id>
    <published>2025-02-28T00:00:00Z</published>
    <updated>2025-02-28T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 5.8 for checked JavaScript: each branch of a returned conditional is checked, require() of ES modules under nodenext, and no more assert.</summary>
  </entry>
  <entry>
    <title>TypeScript 5.7 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/5-7/"/>
    <id>https://jswithtypes.com/typescript/5-7/</id>
    <published>2024-11-22T00:00:00Z</published>
    <updated>2024-11-22T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 5.7 for checked JavaScript: variables nothing ever assigns, JSON imports need with { type: &quot;json&quot; } under nodenext, and es2024.</summary>
  </entry>
  <entry>
    <title>TypeScript 5.6 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/5-6/"/>
    <id>https://jswithtypes.com/typescript/5-6/</id>
    <published>2024-09-09T00:00:00Z</published>
    <updated>2024-09-09T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 5.6 for checked JavaScript: conditions that are always truthy are errors, iterator results under strict, and noUncheckedSideEffectImports.</summary>
  </entry>
  <entry>
    <title>TypeScript 5.5 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/5-5/"/>
    <id>https://jswithtypes.com/typescript/5-5/</id>
    <published>2024-06-20T00:00:00Z</published>
    <updated>2024-06-20T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 5.5 for checked JavaScript: the JSDoc @import tag, inferred type predicates, regular expression checks, and ${configDir}.</summary>
  </entry>
  <entry>
    <title>TypeScript 5.4 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/5-4/"/>
    <id>https://jswithtypes.com/typescript/5-4/</id>
    <published>2024-03-06T00:00:00Z</published>
    <updated>2024-03-06T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 5.4 for checked JavaScript: narrowing that survives into callbacks, the NoInfer type, Object.groupBy types, and module preserve.</summary>
  </entry>
  <entry>
    <title>TypeScript 5.3 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/5-3/"/>
    <id>https://jswithtypes.com/typescript/5-3/</id>
    <published>2023-11-20T00:00:00Z</published>
    <updated>2023-11-20T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 5.3 for checked JavaScript: import attributes, switch (true) narrowing, instanceof with Symbol.hasInstance, and super checks on fields.</summary>
  </entry>
  <entry>
    <title>TypeScript 5.2 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/5-2/"/>
    <id>https://jswithtypes.com/typescript/5-2/</id>
    <published>2023-08-24T00:00:00Z</published>
    <updated>2023-08-24T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 5.2 for checked JavaScript: using declarations, array methods on unions of arrays, .ts paths in import types, and matching module settings.</summary>
  </entry>
  <entry>
    <title>TypeScript 5.1 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/5-1/"/>
    <id>https://jswithtypes.com/typescript/5-1/</id>
    <published>2023-06-01T00:00:00Z</published>
    <updated>2023-06-01T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 5.1 for checked JavaScript: @returns {undefined} needs no return, unrelated getter and setter types, and @param snippets.</summary>
  </entry>
  <entry>
    <title>TypeScript 5.0 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/5-0/"/>
    <id>https://jswithtypes.com/typescript/5-0/</id>
    <published>2023-03-16T00:00:00Z</published>
    <updated>2023-03-16T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 5.0 for checked JavaScript: the @satisfies and @overload tags, @template const, extends with several configs, and moduleResolution bundler.</summary>
  </entry>
  <entry>
    <title>TypeScript 4.9 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/4-9/"/>
    <id>https://jswithtypes.com/typescript/4-9/</id>
    <published>2022-11-15T00:00:00Z</published>
    <updated>2022-11-15T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 4.9 for checked JavaScript: the in operator narrows unknown data, equality checks against not-a-number are errors, and emit keeps every import.</summary>
  </entry>
  <entry>
    <title>TypeScript 4.8 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/4-8/"/>
    <id>https://jswithtypes.com/typescript/4-8/</id>
    <published>2022-08-25T00:00:00Z</published>
    <updated>2022-08-25T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 4.8 for checked JavaScript: a @typedef can no longer be imported by name, comparing with [] is an error, and unknown narrows better.</summary>
  </entry>
  <entry>
    <title>TypeScript 4.7 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/4-7/"/>
    <id>https://jswithtypes.com/typescript/4-7/</id>
    <published>2022-05-24T00:00:00Z</published>
    <updated>2022-05-24T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 4.7 for checked JavaScript: Node.js ES module support with module nodenext, .mjs and .cjs files, package exports, and moduleDetection.</summary>
  </entry>
  <entry>
    <title>TypeScript 4.6 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/4-6/"/>
    <id>https://jswithtypes.com/typescript/4-6/</id>
    <published>2022-02-28T00:00:00Z</published>
    <updated>2022-02-28T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 4.6 for JavaScript: syntax and binding errors in every .js file, even unchecked ones, plus narrowing for destructured unions.</summary>
  </entry>
  <entry>
    <title>TypeScript 4.5 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/4-5/"/>
    <id>https://jswithtypes.com/typescript/4-5/</id>
    <published>2021-11-17T00:00:00Z</published>
    <updated>2021-11-17T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 4.5 for checked JavaScript: @type {const} and default @template arguments in JSDoc, the Awaited type, and #field in obj checks.</summary>
  </entry>
  <entry>
    <title>TypeScript 4.4 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/4-4/"/>
    <id>https://jswithtypes.com/typescript/4-4/</id>
    <published>2021-08-26T00:00:00Z</published>
    <updated>2021-08-26T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 4.4 for JavaScript: caught errors are unknown under strict, spelling suggestions in unchecked .js files, and checks stored in a const narrow.</summary>
  </entry>
  <entry>
    <title>TypeScript 4.3 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/4-3/"/>
    <id>https://jswithtypes.com/typescript/4-3/</id>
    <published>2021-05-26T00:00:00Z</published>
    <updated>2021-05-26T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 4.3 for checked JavaScript: setters that accept more types than their getters return, noImplicitOverride, {@link} in editors, and promise checks.</summary>
  </entry>
  <entry>
    <title>TypeScript 4.2 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/4-2/"/>
    <id>https://jswithtypes.com/typescript/4-2/</id>
    <published>2021-02-23T00:00:00Z</published>
    <updated>2021-02-23T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 4.2 for JavaScript: type arguments in a .js file parse as comparisons, untyped yield results are implicit any, and --explainFiles.</summary>
  </entry>
  <entry>
    <title>TypeScript 4.1 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/4-1/"/>
    <id>https://jswithtypes.com/typescript/4-1/</id>
    <published>2020-11-19T00:00:00Z</published>
    <updated>2020-11-19T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 4.1 for JavaScript: checkJs implies allowJs, @see in editors, noUncheckedIndexedAccess, and resolve() needs a value.</summary>
  </entry>
  <entry>
    <title>TypeScript 4.0 for JavaScript users</title>
    <link rel="alternate" type="text/html" href="https://jswithtypes.com/typescript/4-0/"/>
    <id>https://jswithtypes.com/typescript/4-0/</id>
    <published>2020-08-20T00:00:00Z</published>
    <updated>2020-08-20T00:00:00Z</updated>
    <category term="TypeScript release"/>
    <summary>TypeScript 4.0 for checked JavaScript: @deprecated in editors, ??= and ||=, variadic tuples in JSDoc, and delete needs an optional property.</summary>
  </entry>
</feed>
