J'ai cette fonction:
function getProduct(id: string){
//return some product
}
où id est en fait GUID. TypeScript n'a pas de type guid. Est-il possible de créer manuellement le type GUID
?
function getProduct(id: GUID){
//return some product
}
donc si à la place 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
sera un peu 'notGuidbutJustString'
alors je verrai une erreur de compilation TypeScript.
pdate: comme l'a dit David Sherret: il n'y a aucun moyen de garantir une valeur de chaîne basée sur regex ou une autre fonction au moment de la compilation mais il est possible de faire toutes les vérifications en un seul endroit au moment de l'exécution.
Vous pouvez créer un wrapper autour d'une chaîne et le transmettre:
class GUID {
private str: string;
constructor(str?: string) {
this.str = str || GUID.getNewGUIDString();
}
toString() {
return this.str;
}
private static getNewGUIDString() {
// your favourite guid generation function could go here
// ex: http://stackoverflow.com/a/8809472/188246
let d = new Date().getTime();
if (window.performance && typeof window.performance.now === "function") {
d += performance.now(); //use high-precision timer if available
}
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
let r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d/16);
return (c=='x' ? r : (r & 0x3 | 0x8)).toString(16);
});
}
}
function getProduct(id: GUID) {
alert(id); // alerts "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"
}
const guid = new GUID("xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx");
getProduct(guid); // ok
getProduct("notGuidbutJustString"); // errors, good
const guid2 = new GUID();
console.log(guid2.toString()); // some guid string