A TypeScript GUID class?



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

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

更新的答案

现在,您可以使用crypto.randomUUID()在JavaScript/TypeScript中进行本机操作。

下面是一个生成20个UUID的示例。

for (let i = 0; i < 20; i++) {
    let id = crypto.randomUUID();
    console.log(id);
}

原始答案

在我的TypeScript实用程序中有一个基于JavaScriptGUID生成器的实现。

这是代码:

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 < 20; i++) {
  var id = Guid.newGuid();
  console.log(id);
}

请注意以下内容:

C#GUID保证是唯一的。这个解决方案很可能是独一无二的。在";很可能";以及";保证的";你不想从这个缺口掉下去。

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

我发现了这个https://typescriptbcl.codeplex.com/SourceControl/latest

这是他们的Guid版本,以防以后链接不起作用。

module System {
    export class Guid {
        constructor (public guid: string) {
            this._guid = guid;
        }
        private _guid: string;
        public ToString(): string {
            return this.guid;
        }
        // Static member
        static MakeNew(): Guid {
            var result: string;
            var i: string;
            var j: number;
            result = "";
            for (j = 0; j < 32; j++) {
                if (j == 8 || j == 12 || j == 16 || j == 20)
                    result = result + '-';
                i = Math.floor(Math.random() * 16).toString(16).toUpperCase();
                result = result + i;
            }
            return new Guid(result);
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新