From d1bd9388fcd59f1e5d9c2faf42eaca9337ab8479 Mon Sep 17 00:00:00 2001 From: Graham Hall Date: Wed, 21 Feb 2024 20:26:19 -0500 Subject: [PATCH] more typescript stuff and new post --- .astro/types.d.ts | 7 +++ astro.config.mjs | 2 +- bun.lockb | Bin 235531 -> 250511 bytes newPost.ts | 24 ++++++++++ package.json | 54 +++++++++++----------- src/components/Header.astro | 7 +-- src/content/blog/2024/doctor-type-love.md | 28 +++++++++++ src/content/config.ts | 22 +-------- src/types.ts | 25 ++++++++++ 9 files changed, 117 insertions(+), 52 deletions(-) create mode 100644 newPost.ts create mode 100644 src/content/blog/2024/doctor-type-love.md create mode 100644 src/types.ts diff --git a/.astro/types.d.ts b/.astro/types.d.ts index fea26b7..cd8b382 100644 --- a/.astro/types.d.ts +++ b/.astro/types.d.ts @@ -374,6 +374,13 @@ declare module 'astro:content' { collection: "blog"; data: InferEntrySchema<"blog"> } & { render(): Render[".md"] }; +"2024/doctor-type-love.md": { + id: "2024/doctor-type-love.md"; + slug: "2024/doctor-type-love"; + body: string; + collection: "blog"; + data: InferEntrySchema<"blog"> +} & { render(): Render[".md"] }; "2024/my-backup-solution.md": { id: "2024/my-backup-solution.md"; slug: "2024/my-backup-solution"; diff --git a/astro.config.mjs b/astro.config.mjs index c56b7b2..f2362ae 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,5 +1,5 @@ import { defineConfig } from 'astro/config'; -import netlify from '@astrojs/netlify/functions'; +import netlify from '@astrojs/netlify'; // https://astro.build/config import mdx from '@astrojs/mdx'; diff --git a/bun.lockb b/bun.lockb index 9d2cff970d4be25185d3cd89d4eefb07828f0135..399e3241b4bbe1432f4358a7a90540d6c756d5f4 100755 GIT binary patch delta 21129 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 MG7dnOq*E>UKLjeXEC2ui delta 12529 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 PKCGZ>eRfY(!R>zm<# ` +--- +title: ${title} +pubDate: ${date} +tags: ['${tags.join("', '")}'] +--- + +${md} +`; + +const newPost = () => { + const tagArr = Object.values(Tag); + + console.log(tagArr); +}; + +newPost(); diff --git a/package.json b/package.json index 3a1ef00..ce86909 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,30 @@ { - "name": "ghall.blog", - "type": "module", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro build", - "preview": "astro preview", - "astro": "astro" - }, - "dependencies": { - "@astrojs/mdx": "2.1.0", - "@astrojs/netlify": "5.0.0", - "@astrojs/rss": "4.0.4", - "astro": "4.2.6", - "date-fns": "^3.3.1", - "date-fns-tz": "^1.3.7", - "markdown-it": "^13.0.1", - "sanitize-html": "^2.9.0", - "sharp": "^0.33.2" - }, - "devDependencies": { - "prettier": "^2.8.1", - "prettier-plugin-astro": "^0.7.0" - } + "name": "ghall.blog", + "type": "module", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro", + "new-post": "bun ./newPost.ts" + }, + "dependencies": { + "@astrojs/mdx": "2.1.0", + "@astrojs/netlify": "5.0.0", + "@astrojs/rss": "4.0.4", + "astro": "4.2.6", + "date-fns": "^3.3.1", + "date-fns-tz": "^1.3.7", + "markdown-it": "^13.0.1", + "sanitize-html": "^2.9.0", + "sharp": "^0.33.2" + }, + "devDependencies": { + "inquirer": "^9.2.15", + "prettier": "^2.8.1", + "prettier-plugin-astro": "^0.7.0" + } } diff --git a/src/components/Header.astro b/src/components/Header.astro index 7d7bc7d..4427392 100644 --- a/src/components/Header.astro +++ b/src/components/Header.astro @@ -1,10 +1,7 @@ --- -const { pathname } = Astro.url; +import type { NavLink } from 'src/types'; -type NavLink = { - label: string; - path: string; -}; +const { pathname } = Astro.url; const navLinks: NavLink[] = [ { label: '📝 Blog', path: '/' }, diff --git a/src/content/blog/2024/doctor-type-love.md b/src/content/blog/2024/doctor-type-love.md new file mode 100644 index 0000000..8e43c34 --- /dev/null +++ b/src/content/blog/2024/doctor-type-love.md @@ -0,0 +1,28 @@ +--- +title: 'How I Learned to Stop Worrying and Love TypeScript' +pubDate: '2/21/24' +tags: ['Learning', 'Programming'] +--- + +One of the first steps I took on my post-boot camp webdev journey was to learn TypeScript. It wasn't something that was covered–though I wish it had been, I'll get into why in a second–but it was something we were encouraged to study on our own. I immediately got frustrated, and determined that there was no point. Why would I need to go through the trouble of assigning types to my variables when it was all just getting compiled into vanilla JavaScript anyway? + +Two major things happened since then that changed my tune; I learned Swift, and I started using Bun for personal projects. + +First, I'll tackle Swift. + +Learning Swift was both pretty straightforward coming from JavaScript. The syntax, while pretty different, has some concepts that were familiar to me. By the same token though, Swift is a statically-typed[^1] language and I found that difficult to wrap my head around at first–I had, after all, given up on TypeScript in frustration. + +As I got more comfortable with Swift, I starte to miss the benefits of static typing when working in JavaScript. The ability to just tell my code "hey, this variable here is an integer" and have my code crash, or even just fail to even compile, with a super specific error when I inevitably do something stupid and try to treat that variable as a string is infinitely less frustrating than the alternative. + +Secondly, there's Bun. + +Bun is amazing, and I could write an entire post about how much I love working with bun. Heck, maybe I will, but that's something for another day... + +The main thing about Bun that's relevant to my TypeScript journey is the fact that it can natively interpret TypeScript without having to compile to JavaScript. That means that right out of the box, with no dependencies, Bun can just run your TypeScript code just as easily as it can run JavaScript.[^2] + +While any code getting shipped to the browser will still need to be compiled to vanilla JavaScript, you could, as I understand it, theoretically write your entire back-end in TypeScript and just skip the build step. 🤯 + +I started off being annoyed with using types in my code because, to be quite frank, they are annoying. They'll make your code throw errors whenever you try to multiply a string, or something silly like that. But that's part of the beauty I've come to appreciate. They're there to help you write better code, and to point you in the right direction when something inevitably goes wrong. + +[^1]: [Here](https://stackoverflow.com/questions/1517582/what-is-the-difference-between-statically-typed-and-dynamically-typed-languages) is a StackOverflow thread on the difference between dynamic and static typing put far better than I ever could explain it +[^2]: As an example, I rewrote [my CLI clone of Wordle](https://github.com/ghall89/wordle-cli) in TypeScript diff --git a/src/content/config.ts b/src/content/config.ts index 2fbf11c..aefa827 100644 --- a/src/content/config.ts +++ b/src/content/config.ts @@ -1,28 +1,10 @@ import { z, defineCollection } from 'astro:content'; - -export enum Tag { - 'Apps' = 'Apps', - 'Digital Life' = 'Digital Life', - 'Gaming' = 'Gaming', - 'Learning' = 'Learning', - 'Life' = 'Life', - 'MacOS' = 'MacOS', - 'Music' = 'Music', - 'Making Stuff' = 'Making Stuff', - 'Mental Health' = 'Mental Health', - 'Movies & TV' = 'Movies & TV', - 'Programming' = 'Programming', - 'Tech' = 'Tech', - 'Tutorial' = 'Tutorial', - 'Web Dev' = 'Web Dev', - // only for filtering - all = 'all', -} +import { Tag } from 'src/types'; const blogCollection = defineCollection({ schema: z.object({ title: z.string(), - pubDate: z.string().transform((str) => new Date(str)), + pubDate: z.string().transform((str: string) => new Date(str)), tags: z.array(z.nativeEnum(Tag)), }), }); diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..924bed4 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,25 @@ +// navigation links +export type NavLink = { + label: string; + path: string; +}; + +// blog tags +export enum Tag { + 'Apps' = 'Apps', + 'Digital Life' = 'Digital Life', + 'Gaming' = 'Gaming', + 'Learning' = 'Learning', + 'Life' = 'Life', + 'MacOS' = 'MacOS', + 'Music' = 'Music', + 'Making Stuff' = 'Making Stuff', + 'Mental Health' = 'Mental Health', + 'Movies & TV' = 'Movies & TV', + 'Programming' = 'Programming', + 'Tech' = 'Tech', + 'Tutorial' = 'Tutorial', + 'Web Dev' = 'Web Dev', + // only for filtering + all = 'all', +}