lua
这个语言真的有意思,它由 C 语言构成,又实现了 C 语言所没有的「对象」。早在不知道哪年搞 cocos2d
的时候,就接触了这个语言
hammerspoon
也不是什么新鲜东西了,早在 18 年,公司内部一次「杂鱼分享会」就有人提到了这个工具 —— 快速将光标切到目标显示器以及窗口调整
早期是用过一段时间,写了一个代替小黑帽🎩的工具,后来不了了之。主要还是觉得现在不想用这个语言,太阴间了
当然还有其他方案,比如常见的用到了 moonscript
,这是一个类 coffeescript
的语言,属于 lua 生态圈的东西。但用这个就意味着你需要在本机构建一个 lua 环境(luarock),这么一想那不想干了,现在不用 lua 了还留一个完全不用的开发环境
前些日子关注到有一个项目 TypeScriptToLua / TypeScriptToLua,一直没尝试,这波机会刚好。而且老前端了,谁还没有个 typescript/node 环境呢
安装
虽然是个编译工具,但没必要全局安装,npm init
一个项目出来,直接用即可
npm init
yarn add typescript-to-lua --dev
然后在 package.json
的 script
中加一行build
"dev": "tstl --watch",
"build": "tstl"
也就能用了。建议是看一下这个文档,有一些需要「通过类型文件也就是 d.ts 来控制产物」的文档,还是有必要读一下的
梭
类型文件
有需要的朋友可以看一下我的 typings.d.ts,真的靠interface
一把梭,不考虑程序设计,只求能 work
当然这个「不合理」是要解决的,择日解决完之后,发个包,封装一下
注意点
函数、方法
开发的这个过程是没有什么点,不要玩花,正常使用typescript
即可。只是通过这次重构,我才领悟到「方法」和「函数」的区别…
hammerspoon docs 提到函数其实就是 static
,表现是.
连接的;而实例化之后所使用的方法,是:
连接的。所以这里要注意的就是产物的self
指向。函数的话需要在 d.ts 中写上@noSelf
,不然编译时会被改成:
pcall
一个执行函数的函数,这里有一个坑:被执行的函数需要指定一下this
,也就是xxx.bind(Cla)
,不然会因为self
指向了全局而触发不到对应的方法