免责声明!
在一个放松的星期五晚上,我发现自己想将《命令的语法》带入打字稿。
我指的是:
v, err := do()
if err != nil {
os.Exit(1)
}
试图实现:
const [v, err] = do()
if(err !== null) {
process.exit(1)
}
执行
type Go<T> = [T, null] | [null, Error]
使用这种非常简单的类型,可以将这种语法推断为函数的返回类型:
function do(n: number): Go<number> {
if (isEven(n)) {
return [n ** n, null]
}
return [null, new Error("number is odd")]
}
这样,当它使用时,您会感觉到Goland的怀旧:
const [v, err] = do()
基准
在我的机器上, go-syntax 似乎比 try-catch&throw&throw 一个。
自己尝试一下:
yarn typescript @types/node
yarn start
灵感
我第一次看到这种语法是在await-to-js中。这个简单的小库(我推荐它)为 Promises (如果与await
使用)相同的结果。
至于同步世界,我认为我的解决方案最接近。尽管它需要以某种方式明确编写代码 - 我认为,一种方法比扔东西更好:)