类似Go的回程风格很好又快速
#typescript #go #性能 #benchmark

免责声明!

我不是专业的基准标准。如果我的逻辑有任何错误,请通过mailtwitter告诉我。

Source code

type Go<T> = [T, null] | [null, Error]; const [v, err] = do()

在一个放松的星期五晚上,我发现自己想将《命令的语法》带入打字稿。

我指的是:

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使用)相同的结果。
至于同步世界,我认为我的解决方案最接近。尽管它需要以某种方式明确编写代码 - 我认为,一种方法比扔东西更好:)