GUID / UUID type in typescript

匿名 (未验证) 提交于 2019-12-03 08:44:33

问题:

I have this function:

function getProduct(id: string){         //return some product  } 

where id is actually GUID. Typescript doesn't have guid type. Is it possible create type GUID manually?

function getProduct(id: GUID){         //return some product  } 

so if instead 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' will be some 'notGuidbutJustString' then I will see typescript compilation error.

Update: as David Sherret said: there is no way to ensure a string value based on regex or some other function at compile time but it is possible do all the checks in one place at run time.

回答1:

You could create a wrapper around a string and pass that around:

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 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!