uuid - Uma classe GUID em TypeScript?
Alguém conhece uma boa e sólida implementação de GUID (UUID) no estilo C# em TypeScript?
Poderia fazer eu mesmo, mas pensei em poupar meu tempo se outra pessoa já tivesse feito antes.
Resposta #1
Resposta Atualizada
Isso agora é algo que você pode fazer nativamente em JavaScript/TypeScript com crypto.randomUUID().
Aqui está um exemplo gerando 20 UUIDs.
for (let i = 0; i < 20; i++) {
let id = crypto.randomUUID();
console.log(id);
}Resposta Original
Existe uma implementação nas minhas utilidades TypeScript baseada em geradores de GUID em JavaScript.
Aqui está o código:
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);
}Por favor, observe o seguinte:
Os GUIDs do C# são garantidos para serem únicos. Esta solução é muito provavelmente única. Há uma grande diferença entre "muito provavelmente" e "garantido" e você não quer cair nesse intervalo.
GUIDs gerados em JavaScript são ótimos para usar como uma chave temporária enquanto você espera uma resposta do servidor, mas eu não confiaria necessariamente neles como a chave primária em um banco de dados. Se você for depender de um GUID gerado em JavaScript, eu ficaria tentado a verificar um registro cada vez que um GUID é criado para garantir que você não tenha um duplicado (um problema que surgiu no navegador Chrome em alguns casos).
Resposta #2
Eu encontrei isto https://typescriptbcl.codeplex.com/SourceControl/latest
aqui está a versão do Guid que eles têm caso o link não funcione depois.
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);
}
}
}
