运算符'+'不能应用于类型'number []':如何纠正构建错误?

时间:2019-07-01 06:29:06

标签: javascript typescript

以下函数生成uuidv4字符串。

function uuidv4() {
  return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>
    (
      c ^
      (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
    ).toString(16)
  );
}
console.log(uuidv4());

使用打字稿,当我尝试构建时,出现错误消息:

TS2365: Operator '+' cannot be applied to types 'number[]' and '-1000'.

如何用打字稿成功构建相同的功能?

1 个答案:

答案 0 :(得分:6)

这是一种缩小技术。在此处评估整个表达式(([1e7] + -1e3 + -4e3 + -8e3 + -1e11)),您将获得字符串

10000000-1000-4000-8000-100000000000

因此,只需使用它,而不要依靠强制(Typescript不满意):

function uuidv4() {
    return ("10000000-1000-4000-8000-100000000000").replace(/[018]/g, c =>
        (
        c ^
        (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
        ).toString(16)
    );
}
console.log(uuidv4());

这时,您还可以将所有非四(一)替换为零,如果需要的话,它们现在没有任何作用。