41554 blogs · [ { "id": "01a087b6-f320-7217-b1e0-a08c54877de2", "title": "TypeScript's `erasableSyntaxOnly` Flag", "url": "https://oida.dev/erasable-syntax-only/", "published_at": "2025-02-03T00:00:00+00:00" }, { "id": "01a087b6-f320-7217-b1e0-a08c55818463", "title": "Unsafe for work", "url": "https://oida.dev/unsafe-for-work/", "published_at": "2024-11-22T00:00:00+00:00" }, { "id": "01a087b6-f320-7217-b1e0-a08c562e885c", "title": "Tokio: Macros", "url": "https://oida.dev/rust-tokio-guide/macros/", "published_at": "2024-11-20T00:00:00+00:00" }, { "id": "01a087b6-f320-7217-b1e0-a08c56851ae8", "title": "Tokio: Channels", "url": "https://oida.dev/rust-tokio-guide/channels/", "published_at": "2024-11-19T00:00:00+00:00" }, { "id": "01a087b6-f320-7217-b1e0-a08c56b881b7", "title": "Tokio: Getting Started", "url": "https://oida.dev/rust-tokio-guide/getting-started/", "published_at": "2024-11-18T00:00:00+00:00" }, { "id": "01a087b6-f320-7217-b1e0-a08c57496f52", "title": "Network Applications on the Tokio Stack", "url": "https://oida.dev/rust-tokio-guide/", "published_at": "2024-11-18T00:00:00+00:00" }, { "id": "01a087b6-f320-7217-b1e0-a08c57e8e87a", "title": "Remake, Remodel, Reduce.", "url": "https://oida.dev/remake-remodel-5/", "published_at": "2024-11-07T00:00:00+00:00" }, { "id": "01a087b6-f320-7217-b1e0-a08c58106679", "title": "The `never` type and error handling in TypeScript", "url": "https://oida.dev/typescript-never-and-error-handling/", "published_at": "2024-03-05T00:00:00+00:00" }, { "id": "01a087b6-f320-7217-b1e0-a08c587ad560", "title": "5 Inconvenient Truths about TypeScript", "url": "https://oida.dev/5-truths-about-typescript/", "published_at": "2023-07-17T00:00:00+00:00" }, { "id": "01a087b6-f320-7217-b1e0-a08c592b93a2", "title": "Refactoring in Rust: Introducing Traits", "url": "https://oida.dev/refactoring-rust-introducing-traits/", "published_at": "2023-03-02T00:00:00+00:00" }, { "id": "01a087b6-f320-7217-b1e0-a08c5a230202", "title": "Refactoring in Rust: Abstraction with the Newtype Pattern", "url": "https://oida.dev/refactoring-rust-abstraction-newtype/", "published_at": "2023-02-21T00:00:00+00:00" }, { "id": "01a087b6-f320-7217-b1e0-a08c5ada8b96", "title": "Announcing the TypeScript Cookbook", "url": "https://oida.dev/announcing-the-typescript-cookbook/", "published_at": "2022-11-07T00:00:00+00:00" }, { "id": "01a087b6-f320-7217-b1e0-a08c5ae89c22", "title": "TypeScript: Iterating over objects", "url": "https://oida.dev/typescript-iterating-over-objects/", "published_at": "2022-05-11T00:00:00+00:00" }, { "id": "01a087b6-f320-7217-b1e0-a08c5b3e5da0", "title": "The road to universal JavaScript", "url": "https://oida.dev/the-road-to-universal-javascript/", "published_at": "2022-05-09T00:00:00+00:00" }, { "id": "01a087b6-f320-7217-b1e0-a08c5b609c22", "title": "10 years of oida.dev", "url": "https://oida.dev/10-years-of-fettblog/", "published_at": "2022-04-27T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c3f9de1e7", "title": "Rust: Tiny little traits", "url": "https://oida.dev/rust-tiny-little-traits/", "published_at": "2022-04-15T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c40473de1", "title": "The TypeScript converging point", "url": "https://oida.dev/slides/the-typescript-converging-point/", "published_at": "2022-01-31T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c41151458", "title": "How not to learn TypeScript", "url": "https://oida.dev/how-not-to-learn-typescript/", "published_at": "2022-01-10T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c41a73211", "title": "Getting started with Rust", "url": "https://oida.dev/getting-started-with-rust/", "published_at": "2021-12-23T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c42413a56", "title": "Introducing Slides and Coverage", "url": "https://oida.dev/introducing-the-slides-section/", "published_at": "2021-12-14T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c4286ef82", "title": "TypeScript: The humble function overload", "url": "https://oida.dev/typescript-function-overload/", "published_at": "2021-11-30T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c42b4d3fa", "title": "TypeScript + React: Children types are broken", "url": "https://oida.dev/react-types-for-children-are-broken/", "published_at": "2021-09-15T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c42e0b139", "title": "TypeScript: In defense of any", "url": "https://oida.dev/typescript-any-is-ok/", "published_at": "2021-09-14T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c42e81e18", "title": "Rust: Enums to wrap multiple errors", "url": "https://oida.dev/rust-enums-wrapping-errors/", "published_at": "2021-09-09T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c4338fd30", "title": "Dissecting Deno", "url": "https://oida.dev/dissecting-deno/", "published_at": "2021-09-08T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c436b80f6", "title": "Error handling in Rust", "url": "https://oida.dev/rust-error-handling/", "published_at": "2021-09-07T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c43f219b2", "title": "TypeScript: Unexpected intersections", "url": "https://oida.dev/typescript-unexpected-intersections/", "published_at": "2021-07-21T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c441efad3", "title": "Upgrading Node.js dependencies after a yarn audit", "url": "https://oida.dev/yarn-audit-fix/", "published_at": "2021-07-07T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c446428fa", "title": "TypeScript: Array.includes on narrow types", "url": "https://oida.dev/typescript-array-includes/", "published_at": "2021-07-06T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c44cb371b", "title": "TypeScript + React: Typing Generic forwardRefs", "url": "https://oida.dev/typescript-react-generic-forward-refs/", "published_at": "2021-04-13T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c454be156", "title": "shared, util, core: Schroedinger's module names", "url": "https://oida.dev/schroedingers-architecture/", "published_at": "2021-03-15T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c45ea7efc", "title": "Learning Rust and Go", "url": "https://oida.dev/learning-rust-and-go/", "published_at": "2021-03-03T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c465caa52", "title": "TypeScript: Narrow types in catch clauses", "url": "https://oida.dev/typescript-typing-catch-clauses/", "published_at": "2021-03-02T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c474e4f2f", "title": "TypeScript: Low maintenance types", "url": "https://oida.dev/low-maintenance-types-typescript/", "published_at": "2021-01-20T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c47a77383", "title": "Tidy TypeScript: Name your generics", "url": "https://oida.dev/tidy-typescript-name-your-generics/", "published_at": "2021-01-07T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c48370334", "title": "Tidy TypeScript: Avoid traditional OOP patterns", "url": "https://oida.dev/tidy-typescript-avoid-traditional-oop/", "published_at": "2020-11-24T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c48d5d4d6", "title": "Tidy TypeScript: Prefer type aliases over interfaces", "url": "https://oida.dev/tidy-typescript-prefer-type-aliases/", "published_at": "2020-11-20T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c48e2ffb6", "title": "Tidy TypeScript: Prefer union types over enums", "url": "https://oida.dev/tidy-typescript-avoid-enums/", "published_at": "2020-11-19T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c4982228d", "title": "My new book: TypeScript in 50 Lessons", "url": "https://oida.dev/new-book-typescript-in-50-lessons/", "published_at": "2020-10-12T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c4a069c3b", "title": "Go Preact! ❤️", "url": "https://oida.dev/go-preact/", "published_at": "2020-08-24T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c4aefc4d9", "title": "this in JavaScript and TypeScript", "url": "https://oida.dev/this-in-javascript-and-typescript/", "published_at": "2020-08-19T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c4ba8f1cd", "title": "TypeScript and ECMAScript Modules", "url": "https://oida.dev/typescript-and-es-modules/", "published_at": "2020-08-14T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c4ca294f4", "title": "TypeScript + React: Why I don't use React.FC", "url": "https://oida.dev/typescript-react-why-i-dont-use-react-fc/", "published_at": "2020-07-30T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c4cc7872d", "title": "TypeScript + React: Component patterns", "url": "https://oida.dev/typescript-react-component-patterns/", "published_at": "2020-07-28T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c4d5ff886", "title": "TypeScript: Augmenting global and lib.dom.d.ts", "url": "https://oida.dev/typescript-augmenting-global-lib-dom/", "published_at": "2020-07-17T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c4d960a90", "title": "Vite with Preact and TypeScript", "url": "https://oida.dev/typescript-vite-preact/", "published_at": "2020-07-06T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c4e7fdfd3", "title": "TypeScript: Union to intersection type", "url": "https://oida.dev/typescript-union-to-intersection/", "published_at": "2020-06-29T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c4f6e0c03", "title": "11ty: Generate Twitter cards automatically", "url": "https://oida.dev/11ty-automatic-twitter-cards/", "published_at": "2020-06-25T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c4fef7f94", "title": "Are large node module dependencies an issue?", "url": "https://oida.dev/impact-of-large-node-modules/", "published_at": "2020-06-22T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c5036155f", "title": "TypeScript: Variadic Tuple Types Preview", "url": "https://oida.dev/variadic-tuple-types-preview/", "published_at": "2020-06-19T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c5129cc1d", "title": "TypeScript: Improving Object.keys", "url": "https://oida.dev/typescript-better-object-keys/", "published_at": "2020-06-17T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c51ed6d11", "title": "Remake, Remodel. Part 4.", "url": "https://oida.dev/remake-remodel-part-4-11ty/", "published_at": "2020-06-16T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c52e89174", "title": "TypeScript + React: Typing custom hooks with tuple types", "url": "https://oida.dev/typescript-react-typeing-custom-hooks/", "published_at": "2020-03-25T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c53c54eb2", "title": "TypeScript: Assertion signatures and Object.defineProperty", "url": "https://oida.dev/typescript-assertion-signatures/", "published_at": "2020-02-06T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c544cf7b2", "title": "TypeScript: Check for object properties and narrow down type", "url": "https://oida.dev/typescript-hasownproperty/", "published_at": "2020-02-03T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c549e0059", "title": "Boolean in JavaScript and TypeScript", "url": "https://oida.dev/boolean-in-javascript-and-typescript/", "published_at": "2019-09-10T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c556c8db1", "title": "void in JavaScript and TypeScript", "url": "https://oida.dev/void-in-javascript-and-typescript/", "published_at": "2019-09-06T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c55ff5700", "title": "Symbols in JavaScript and TypeScript", "url": "https://oida.dev/symbols-in-javascript-and-typescript/", "published_at": "2019-09-04T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c568409f6", "title": "Why I use TypeScript", "url": "https://oida.dev/why-i-use-typescript/", "published_at": "2019-08-28T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c56bb58c8", "title": "TypeScript + React: Extending JSX Elements", "url": "https://oida.dev/typescript-react-extending-jsx-elements/", "published_at": "2019-08-27T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c578b6036", "title": "TypeScript: Validate mapped types and const context", "url": "https://oida.dev/typescript-validate-mapped-types-and-const-context/", "published_at": "2019-08-26T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c57bbfc12", "title": "TypeScript: Match the exact object shape", "url": "https://oida.dev/typescript-match-the-exact-object-shape/", "published_at": "2019-08-19T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c583968b1", "title": "TypeScript: The constructor interface pattern", "url": "https://oida.dev/typescript-interface-constructor-pattern/", "published_at": "2019-08-15T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c58831f2a", "title": "Streaming your Meetup - Part 4: Directing and Streaming with OBS", "url": "https://oida.dev/streaming-your-meetup-part-4-obs/", "published_at": "2019-08-06T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c5925ccc5", "title": "Streaming your Meetup - Part 3: Speaker audio", "url": "https://oida.dev/streaming-your-meetup-part-3-audio/", "published_at": "2019-07-30T00:00:00+00:00" }, { "id": "01a087b6-f321-72d9-be74-112c5938b2b0", "title": "Streaming your Meetup - Part 2: Speaker video", "url": "https://oida.dev/streaming-your-meetup-part-2-video/", "published_at": "2019-07-25T00:00:00+00:00" }, { "id": "01a087b6-f322-7284-b665-d015163f6af5", "title": "Streaming your Meetup - Part 1: Basics and Projector", "url": "https://oida.dev/streaming-your-meetup-part-1-projector/", "published_at": "2019-07-24T00:00:00+00:00" }, { "id": "01a087b6-f322-7284-b665-d0151679d0d1", "title": "TypeScript and React Guide: Added a new styles chapter", "url": "https://oida.dev/redirect-to-typescript-react-styles/", "published_at": "2019-07-19T00:00:00+00:00" }, { "id": "01a087b6-f322-7284-b665-d0151685d357", "title": "TypeScript and React Guide: Added a new render props chapter", "url": "https://oida.dev/redirect-to-typescript-react-render-props/", "published_at": "2019-07-18T00:00:00+00:00" }, { "id": "01a087b6-f322-7284-b665-d01517463e30", "title": "TypeScript and React: Styles and CSS", "url": "https://oida.dev/typescript-react/{{page.fileSlug}}/", "published_at": "2019-07-17T00:00:00+00:00" }, { "id": "01a087b6-f322-7284-b665-d01517916f7e", "title": "TypeScript and React", "url": "https://oida.dev/typescript-react/", "published_at": "2019-07-17T00:00:00+00:00" }, { "id": "01a087b6-f322-7284-b665-d015181b4800", "title": "TypeScript and React Guide: Added a new prop types chapter", "url": "https://oida.dev/redirect-to-typescript-react-prop-types/", "published_at": "2019-07-17T00:00:00+00:00" }, { "id": "01a087b6-f322-7284-b665-d01519012d91", "title": "TypeScript without TypeScript -- JSDoc superpowers", "url": "https://oida.dev/typescript-jsdoc-superpowers/", "published_at": "2019-07-16T00:00:00+00:00" }, { "id": "01a087b6-f322-7284-b665-d015194cb0d8", "title": "TypeScript: Mapped types for type maps", "url": "https://oida.dev/typescript-type-maps/", "published_at": "2019-07-15T00:00:00+00:00" }, { "id": "01a087b6-f322-7284-b665-d0151a1b7e02", "title": "JAMStack vs serverless web apps", "url": "https://oida.dev/jamstack-vs-serverless-web-apps/", "published_at": "2019-05-30T00:00:00+00:00" }, { "id": "01a087b6-f322-7284-b665-d0151ac4181d", "title": "The Unsung Benefits of JAMStack Sites", "url": "https://oida.dev/jamstack-the-unsung-benefits/", "published_at": "2019-05-09T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda1ff7fb362", "title": "TypeScript: Ambient modules for Webpack loaders", "url": "https://oida.dev/typescript-modules-for-webpack/", "published_at": "2019-02-13T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda2002ec446", "title": "My most favourite talks in 2018", "url": "https://oida.dev/top-talks-to-watch-2018/", "published_at": "2018-12-27T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda200897a58", "title": "TypeScript and React Guide: Added a new context chapter", "url": "https://oida.dev/redirect-to-typescript-react-context/", "published_at": "2018-12-16T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda2010b2144", "title": "TypeScript: Built-in generic types", "url": "https://oida.dev/typescript-built-in-generics/", "published_at": "2018-12-12T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda201a7736f", "title": "TypeScript: Type predicates", "url": "https://oida.dev/typescript-type-predicates/", "published_at": "2018-11-29T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda2020b72cf", "title": "JSX is syntactic sugar", "url": "https://oida.dev/jsx-syntactic-sugar/", "published_at": "2018-11-21T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda2028fea45", "title": "TypeScript and React Guide: Added a new hooks chapter", "url": "https://oida.dev/redirect-to-typescript-react-hooks/", "published_at": "2018-11-15T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda202e9aa57", "title": "Getting your CfP application right", "url": "https://oida.dev/rock-the-cfp/", "published_at": "2018-11-14T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda203642986", "title": "FAQ on our Angular Connect Talk: Automating UI development", "url": "https://oida.dev/angular-connect/", "published_at": "2018-11-08T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda203c22dae", "title": "TypeScript and Substitutability", "url": "https://oida.dev/typescript-substitutability/", "published_at": "2018-03-16T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda2048077b6", "title": "Debugging Node.js apps in TypeScript with Visual Studio Code", "url": "https://oida.dev/typescript-node-visual-studio-code/", "published_at": "2018-03-14T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda2050532d3", "title": "From Medium: Deconfusing Pre- and Post-processing", "url": "https://oida.dev/pre-and-post-processing/", "published_at": "2018-03-06T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda20539bbca", "title": "From Medium: PostCSS misconceptions", "url": "https://oida.dev/postcss-misconceptions/", "published_at": "2018-03-05T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda205a47162", "title": "Saving and scraping a website with Puppeteer", "url": "https://oida.dev/scraping-with-puppeteer/", "published_at": "2018-02-20T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda205e347d7", "title": "Cutting the mustard - 2018 edition", "url": "https://oida.dev/cutting-the-mustard-2018/", "published_at": "2018-02-13T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda2063478b7", "title": "Wordpress as CMS for your JAMStack sites", "url": "https://oida.dev/wordpress-and-jamstack-sites/", "published_at": "2018-01-08T00:00:00+00:00" }, { "id": "01a087b6-f32c-7187-88e4-dda20641ae9f", "title": "My most favourite podcast episodes in 2017", "url": "https://oida.dev/top-podcast-episodes-2017/", "published_at": "2017-12-31T00:00:00+00:00" }, { "id": "01a087b6-f32d-7198-97d6-087a041f2d19", "title": "My most favourite talks in 2017", "url": "https://oida.dev/top-talks-to-watch-2017/", "published_at": "2017-12-30T00:00:00+00:00" }, { "id": "01a087b6-f32d-7198-97d6-087a04c0ac25", "title": "My most favourite books in 2017", "url": "https://oida.dev/top-books-to-read-2017/", "published_at": "2017-12-28T00:00:00+00:00" }, { "id": "01a087b6-f32d-7198-97d6-087a05535d84", "title": "The Best Request Is No Request, Revisited", "url": "https://oida.dev/the-best-request/", "published_at": "2017-11-29T00:00:00+00:00" }, { "id": "01a087b6-f32d-7198-97d6-087a06165c95", "title": "Not so hidden figures - Organizing ScriptConf", "url": "https://oida.dev/not-so-hidden-figures/", "published_at": "2017-08-09T00:00:00+00:00" }, { "id": "01a087b6-f32d-7198-97d6-087a066820fb", "title": "My podcast journey to ScriptCast", "url": "https://oida.dev/scriptcast/", "published_at": "2017-07-11T00:00:00+00:00" }, { "id": "01a087b6-f32d-7198-97d6-087a072b26cf", "title": "Grid layout, grid layout everywhere!", "url": "https://oida.dev/grid-concepts/", "published_at": "2017-06-27T00:00:00+00:00" }, { "id": "01a087b6-f32d-7198-97d6-087a0744db1c", "title": "#scriptconf and #devone", "url": "https://oida.dev/scriptconf-and-devone/", "published_at": "2017-06-03T00:00:00+00:00" } ] posts Claim your blog
Back to oida.dev
Blog · corpus.blog/blogs/oida.dev/posts

oida.dev

oida.dev

2025

2024

2023

2022

2021

2020

2019

2018

2017