TypeScript support! 🚀
beta.62 brings with it a long-awaited, much-requested feature: TypeScript support!
TypeScript Support 🚀
1. But, how?
Each time your run a TS script, Script Kit will compile the TS script using esbuild
to a JS script in a .scripts
dir (notice the "dot"). The compiled JS script is then imported from there. Using .scripts
as a sibling dir will help avoid any import
/path issues. You can also write TS "library" files in your ~/.kenv/lib
dir and import them into your script just fine.
If you're experienced with esbuild
and curious about the settings, they look like this:
This also opens the door to exporting/building/bundling scripts and libs as individual shippable tools which I'll investigate more in the future.
2. Can I still run my JS scripts if I switch to TS?
Yes! Both your TS and JS scripts will show up in the UI.
3. Why the import "@johnlindquist/kit"
?
When you create a new TS script, the generated script will start with the line: import "@johnlindquist/kit"
This is mostly to make your editor stop complaining by forcing it to load the type definition files and forcing it to treat the file as an "es module" so support "top-level await
". It's not technically required since it's not technically importing anything, but your editor will certainly complain very loudly if you leave it out.
4. Where is the setting stored?
Look in your ~/.kenv/.env
for KIT_MODE=ts
.
fs-extra's added to global
The fs-extra methods are now added on the global space. I found myself using outputFile
, write/readJson
, etc too often and found them to be a great addition. The only one missing is copy
since we're already using that to "copy to clipboard". You can bring it in with the normal import/alias process if needed, e.g., let {copy:fsCopy} = await import("fs-extra")
Sync Path
You may notice running scripts from the Script Kit app that some commands you can run in your terminal might be missing, like "yarn", etc.
Run the following command in your terminal to copy the $PATH var from your terminal to your ~/.kenv/.env
. This will help "sync" up which commands are available between your terminal and running scripts from the app.