以下函数生成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'.
如何用打字稿成功构建相同的功能?
答案 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());
这时,您还可以将所有非四(一)替换为零,如果需要的话,它们现在没有任何作用。