TypeScript GUID类?

时间:2014-10-22 06:42:32

标签: typescript uuid guid

有没有人知道TypeScript中的C#(如GUID(UUID))的良好,可靠的实现?

可以自己做,但是如果别人以前做过这件事,我可以节省时间。

2 个答案:

答案 0 :(得分:105)

我的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时检查一个寄存器,以确保您没有重复(在某些情况下,Chrome浏览器中出现了一个问题) )。

答案 1 :(得分:10)

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

这里有the Guid version,以防链接以后不起作用。

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);
        }
    }
}