有人知道TypeScript中类似C#的GUID(UUID)的良好、可靠的实现吗?

我可以自己做,但我想如果别人以前做过,我会抽出时间.

推荐答案

my TypeScript utilities中有一个基于JavaScript GUID生成器的实现.

以下是代码:

class Guid {
  static newGuid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
      var r = Math.random() * 16 | 0,
        v = c == 'x' ? r : (r & 0x3 | 0x8);
      return v.toString(16);
    });
  }
}

// Example of a bunch of GUIDs
for (var i = 0; i < 100; i++) {
  var id = Guid.newGuid();
  console.log(id);
}

请注意以下几点:

C#guid保证是唯一的.这个解决方案是独一无二的."非常可能"和"保证"之间有巨大的差距,你不想跌破这一差距.

JavaScript生成的guid很适合用作临时键,在等待服务器响应时使用,但我不一定相信它们是数据库中的主键.如果要依赖JavaScript生成的GUID,我会在每次创建GUID时判断一个寄存器,以确保没有重复的GUID(在某些情况下,Chrome浏览器会出现这个问题).

Typescript相关问答推荐

如何声明循环数组类型?

映射类型中和映射类型之间的通用变量推断

net::BER_RECTION_REUSED和Uncatch使用Axios和TanStack-Query useMutation时未捕获错误(DelivercMutation)

有没有一种方法可以在保持类型的可选状态的同时更改类型?

在泛型类型中对子代执行递归时出错

使某些(嵌套)属性成为可选属性

如何表示多层深度的泛型类型数组?

带switch 的函数的返回类型的类型缩小

为什么T[数字]不也返回UNDEFINED?

被推断为原始类型的交集的扩充类型的交集

TypeScrip泛型类未提供预期的类型错误

如何创建由空格连接的多个字符串的类型

TypeScrip:使用Union ToInterval辅助对象,但保留子表达式

打字脚本中的模块化或命名空间

是否将Angular *ngFor和*ngIf迁移到新的v17语法?

如何键入并类型的函数&S各属性

基于泛型的类型脚本修改类型

如何使用 runInInjectionContext 中的参数测试功能性路由防护

将对象数组传递给 Typescript 中的导入函数

可选通用映射器函数出错