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.
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