ಕನ್ನಡ

ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್ ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಅನ್ವೇಷಿಸಿ. ಇದು ಸ್ಟ್ರಕ್ಚರಲ್ ಟೈಪ್ ಸಿಸ್ಟಮ್‌ನಲ್ಲಿ ನಾಮಿನಲ್ ಟೈಪಿಂಗ್ ಸಾಧಿಸಲು ಇರುವ ಪ್ರಬಲ ತಂತ್ರವಾಗಿದೆ. ಟೈಪ್ ಸುರಕ್ಷತೆ ಮತ್ತು ಕೋಡ್ ಸ್ಪಷ್ಟತೆಯನ್ನು ಹೆಚ್ಚಿಸುವುದು ಹೇಗೆಂದು ತಿಳಿಯಿರಿ.

ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್ ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್: ಒಂದು ಸ್ಟ್ರಕ್ಚರಲ್ ಸಿಸ್ಟಮ್‌ನಲ್ಲಿ ನಾಮಿನಲ್ ಟೈಪಿಂಗ್

ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್‌ನ ಸ್ಟ್ರಕ್ಚರಲ್ ಟೈಪ್ ಸಿಸ್ಟಮ್ ನಮ್ಯತೆಯನ್ನು ನೀಡುತ್ತದೆ, ಆದರೆ ಕೆಲವೊಮ್ಮೆ ಅನಿರೀಕ್ಷಿತ ನಡವಳಿಕೆಗೆ ಕಾರಣವಾಗಬಹುದು. ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ನಾಮಿನಲ್ ಟೈಪಿಂಗ್ ಅನ್ನು ಜಾರಿಗೊಳಿಸಲು ಒಂದು ಮಾರ್ಗವನ್ನು ಒದಗಿಸುತ್ತವೆ, ಇದರಿಂದ ಟೈಪ್ ಸುರಕ್ಷತೆ ಮತ್ತು ಕೋಡ್ ಸ್ಪಷ್ಟತೆ ಹೆಚ್ಚಾಗುತ್ತದೆ. ಈ ಲೇಖನವು ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಅನ್ನು ವಿವರವಾಗಿ ಅನ್ವೇಷಿಸುತ್ತದೆ, ಅವುಗಳ ಅನುಷ್ಠಾನಕ್ಕಾಗಿ ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳು ಮತ್ತು ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.

ಸ್ಟ್ರಕ್ಚರಲ್ ವರ್ಸಸ್ ನಾಮಿನಲ್ ಟೈಪಿಂಗ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು

ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಬಗ್ಗೆ ತಿಳಿಯುವ ಮೊದಲು, ಸ್ಟ್ರಕ್ಚರಲ್ ಮತ್ತು ನಾಮಿನಲ್ ಟೈಪಿಂಗ್ ನಡುವಿನ ವ್ಯತ್ಯಾಸವನ್ನು ಸ್ಪಷ್ಟಪಡಿಸೋಣ.

ಸ್ಟ್ರಕ್ಚರಲ್ ಟೈಪಿಂಗ್ (ಡಕ್ ಟೈಪಿಂಗ್)

ಸ್ಟ್ರಕ್ಚರಲ್ ಟೈಪ್ ಸಿಸ್ಟಮ್‌ನಲ್ಲಿ, ಎರಡು ಟೈಪ್‌ಗಳು ಒಂದೇ ರೀತಿಯ ರಚನೆಯನ್ನು ಹೊಂದಿದ್ದರೆ (ಅಂದರೆ, ಒಂದೇ ರೀತಿಯ ಪ್ರಾಪರ್ಟಿಗಳನ್ನು ಒಂದೇ ಟೈಪ್‌ಗಳೊಂದಿಗೆ ಹೊಂದಿದ್ದರೆ) ಅವುಗಳನ್ನು ಹೊಂದಾಣಿಕೆಯಾಗುವಂತೆ ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ. ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್ ಸ್ಟ್ರಕ್ಚರಲ್ ಟೈಪಿಂಗ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ಈ ಉದಾಹರಣೆಯನ್ನು ಪರಿಗಣಿಸಿ:


interface Point {
  x: number;
  y: number;
}

interface Vector {
  x: number;
  y: number;
}

const point: Point = { x: 10, y: 20 };
const vector: Vector = point; // Valid in TypeScript

console.log(vector.x); // Output: 10

ಇಲ್ಲಿ Point ಮತ್ತು Vector ಅನ್ನು ವಿಭಿನ್ನ ಟೈಪ್‌ಗಳಾಗಿ ಘೋಷಿಸಲಾಗಿದ್ದರೂ, ಅವು ಒಂದೇ ರೀತಿಯ ರಚನೆಯನ್ನು ಹಂಚಿಕೊಳ್ಳುವುದರಿಂದ ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್ ಒಂದು Point ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು Vector ವೇರಿಯೇಬಲ್‌ಗೆ ನಿಯೋಜಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. ಇದು ಅನುಕೂಲಕರವಾಗಿರಬಹುದು, ಆದರೆ ಒಂದೇ ಆಕಾರವನ್ನು ಹೊಂದಿರುವ ತಾರ್ಕಿಕವಾಗಿ ವಿಭಿನ್ನ ಟೈಪ್‌ಗಳ ನಡುವೆ ವ್ಯತ್ಯಾಸವನ್ನು ಗುರುತಿಸಬೇಕಾದಾಗ ಇದು ದೋಷಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು. ಉದಾಹರಣೆಗೆ, ಅಕ್ಷಾಂಶ/ರೇಖಾಂಶದ ನಿರ್ದೇಶಾಂಕಗಳು ಆಕಸ್ಮಿಕವಾಗಿ ಸ್ಕ್ರೀನ್ ಪಿಕ್ಸೆಲ್ ನಿರ್ದೇಶಾಂಕಗಳಿಗೆ ಹೊಂದಿಕೆಯಾಗಬಹುದು.

ನಾಮಿನಲ್ ಟೈಪಿಂಗ್

ನಾಮಿನಲ್ ಟೈಪ್ ಸಿಸ್ಟಮ್‌ನಲ್ಲಿ, ಟೈಪ್‌ಗಳು ಒಂದೇ ಹೆಸರನ್ನು ಹೊಂದಿದ್ದರೆ ಮಾತ್ರ ಅವುಗಳನ್ನು ಹೊಂದಾಣಿಕೆಯಾಗುವಂತೆ ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ. ಎರಡು ಟೈಪ್‌ಗಳು ಒಂದೇ ರೀತಿಯ ರಚನೆಯನ್ನು ಹೊಂದಿದ್ದರೂ, ಅವು ವಿಭಿನ್ನ ಹೆಸರುಗಳನ್ನು ಹೊಂದಿದ್ದರೆ ಅವುಗಳನ್ನು ವಿಭಿನ್ನವೆಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ. ಜಾವಾ ಮತ್ತು C# ನಂತಹ ಭಾಷೆಗಳು ನಾಮಿನಲ್ ಟೈಪಿಂಗ್ ಅನ್ನು ಬಳಸುತ್ತವೆ.

ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್‌ನ ಅವಶ್ಯಕತೆ

ಒಂದು ಮೌಲ್ಯವು ಅದರ ರಚನೆಯನ್ನು ಲೆಕ್ಕಿಸದೆ ಒಂದು ನಿರ್ದಿಷ್ಟ ಟೈಪ್‌ಗೆ ಸೇರಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬೇಕಾದಾಗ ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್‌ನ ಸ್ಟ್ರಕ್ಚರಲ್ ಟೈಪಿಂಗ್ ಸಮಸ್ಯಾತ್ಮಕವಾಗಬಹುದು. ಉದಾಹರಣೆಗೆ, ಕರೆನ್ಸಿಗಳನ್ನು ಪ್ರತಿನಿಧಿಸುವುದನ್ನು ಪರಿಗಣಿಸಿ. ನೀವು USD ಮತ್ತು EUR ಗಾಗಿ ವಿಭಿನ್ನ ಟೈಪ್‌ಗಳನ್ನು ಹೊಂದಿರಬಹುದು, ಆದರೆ ಅವೆರಡನ್ನೂ ಸಂಖ್ಯೆಗಳಾಗಿ ಪ್ರತಿನಿಧಿಸಬಹುದು. ಅವುಗಳನ್ನು ಪ್ರತ್ಯೇಕಿಸುವ ಯಾಂತ್ರಿಕ ವ್ಯವಸ್ಥೆ ಇಲ್ಲದೆ, ನೀವು ಆಕಸ್ಮಿಕವಾಗಿ ತಪ್ಪು ಕರೆನ್ಸಿಯ ಮೇಲೆ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಮಾಡಬಹುದು.

ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಈ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುತ್ತವೆ, ರಚನಾತ್ಮಕವಾಗಿ ಒಂದೇ ರೀತಿ ಇರುವ ಆದರೆ ಟೈಪ್ ಸಿಸ್ಟಮ್‌ನಿಂದ ವಿಭಿನ್ನವಾಗಿ ಪರಿಗಣಿಸಲ್ಪಡುವ ವಿಭಿನ್ನ ಟೈಪ್‌ಗಳನ್ನು ರಚಿಸಲು ನಿಮಗೆ ಅವಕಾಶ ನೀಡುತ್ತವೆ. ಇದು ಟೈಪ್ ಸುರಕ್ಷತೆಯನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ ಮತ್ತು ಇಲ್ಲದಿದ್ದರೆ ಉಂಟಾಗಬಹುದಾದ ದೋಷಗಳನ್ನು ತಡೆಯುತ್ತದೆ.

ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಅನ್ನು ಅನುಷ್ಠಾನಗೊಳಿಸುವುದು

ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಅನ್ನು ಇಂಟರ್‌ಸೆಕ್ಷನ್ ಟೈಪ್ಸ್ ಮತ್ತು ಒಂದು ಅನನ್ಯ ಸಿಂಬಲ್ ಅಥವಾ ಸ್ಟ್ರಿಂಗ್ ಲಿಟರಲ್ ಬಳಸಿ ಅನುಷ್ಠಾನಗೊಳಿಸಲಾಗುತ್ತದೆ. ಇದರ ಉದ್ದೇಶವೆಂದರೆ, ಒಂದು ಟೈಪ್‌ಗೆ "ಬ್ರ್ಯಾಂಡ್" ಸೇರಿಸುವುದು, ಅದು ಒಂದೇ ರಚನೆಯನ್ನು ಹೊಂದಿರುವ ಇತರ ಟೈಪ್‌ಗಳಿಂದ ಅದನ್ನು ಪ್ರತ್ಯೇಕಿಸುತ್ತದೆ.

ಸಿಂಬಲ್‌ಗಳನ್ನು ಬಳಸುವುದು (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)

ಬ್ರ್ಯಾಂಡಿಂಗ್‌ಗಾಗಿ ಸಿಂಬಲ್‌ಗಳನ್ನು ಬಳಸುವುದು ಸಾಮಾನ್ಯವಾಗಿ ಉತ್ತಮ, ಏಕೆಂದರೆ ಸಿಂಬಲ್‌ಗಳು ಅನನ್ಯವಾಗಿರುತ್ತವೆ ಎಂದು ಖಾತರಿಪಡಿಸಲಾಗುತ್ತದೆ.


const USD = Symbol('USD');
type USD = number & { readonly [USD]: unique symbol };

const EUR = Symbol('EUR');
type EUR = number & { readonly [EUR]: unique symbol };

function createUSD(value: number): USD {
  return value as USD;
}

function createEUR(value: number): EUR {
  return value as EUR;
}

function addUSD(a: USD, b: USD): USD {
  return (a + b) as USD;
}

const usd1 = createUSD(10);
const usd2 = createUSD(20);
const eur1 = createEUR(15);

const totalUSD = addUSD(usd1, usd2);
console.log("Total USD:", totalUSD);

// Uncommenting the next line will cause a type error
// const invalidOperation = addUSD(usd1, eur1);

ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, USD ಮತ್ತು EUR number ಟೈಪ್ ಅನ್ನು ಆಧರಿಸಿದ ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್‌ಗಳಾಗಿವೆ. unique symbol ಈ ಟೈಪ್‌ಗಳು ವಿಭಿನ್ನವಾಗಿವೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ. createUSD ಮತ್ತು createEUR ಫಂಕ್ಷನ್‌ಗಳು ಈ ಟೈಪ್‌ಗಳ ಮೌಲ್ಯಗಳನ್ನು ರಚಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ, ಮತ್ತು addUSD ಫಂಕ್ಷನ್ ಕೇವಲ USD ಮೌಲ್ಯಗಳನ್ನು ಮಾತ್ರ ಸ್ವೀಕರಿಸುತ್ತದೆ. EUR ಮೌಲ್ಯವನ್ನು USD ಮೌಲ್ಯಕ್ಕೆ ಸೇರಿಸಲು ಪ್ರಯತ್ನಿಸಿದರೆ ಟೈಪ್ ಎರರ್ ಉಂಟಾಗುತ್ತದೆ.

ಸ್ಟ್ರಿಂಗ್ ಲಿಟರಲ್‌ಗಳನ್ನು ಬಳಸುವುದು

ನೀವು ಬ್ರ್ಯಾಂಡಿಂಗ್‌ಗಾಗಿ ಸ್ಟ್ರಿಂಗ್ ಲಿಟರಲ್‌ಗಳನ್ನು ಸಹ ಬಳಸಬಹುದು, ಆದರೂ ಈ ವಿಧಾನವು ಸಿಂಬಲ್‌ಗಳನ್ನು ಬಳಸುವುದಕ್ಕಿಂತ ಕಡಿಮೆ ದೃಢವಾಗಿರುತ್ತದೆ, ಏಕೆಂದರೆ ಸ್ಟ್ರಿಂಗ್ ಲಿಟರಲ್‌ಗಳು ಅನನ್ಯವಾಗಿರುತ್ತವೆ ಎಂದು ಖಾತರಿಪಡಿಸಲಾಗುವುದಿಲ್ಲ.


type USD = number & { readonly __brand: 'USD' };
type EUR = number & { readonly __brand: 'EUR' };

function createUSD(value: number): USD {
  return value as USD;
}

function createEUR(value: number): EUR {
  return value as EUR;
}

function addUSD(a: USD, b: USD): USD {
  return (a + b) as USD;
}

const usd1 = createUSD(10);
const usd2 = createUSD(20);
const eur1 = createEUR(15);

const totalUSD = addUSD(usd1, usd2);
console.log("Total USD:", totalUSD);

// Uncommenting the next line will cause a type error
// const invalidOperation = addUSD(usd1, eur1);

ಈ ಉದಾಹರಣೆಯು ಹಿಂದಿನ ಉದಾಹರಣೆಯಂತೆಯೇ ಅದೇ ಫಲಿತಾಂಶವನ್ನು ಸಾಧಿಸುತ್ತದೆ, ಆದರೆ ಸಿಂಬಲ್‌ಗಳ ಬದಲಿಗೆ ಸ್ಟ್ರಿಂಗ್ ಲಿಟರಲ್‌ಗಳನ್ನು ಬಳಸುತ್ತದೆ. ಇದು ಸರಳವಾಗಿದ್ದರೂ, ಬ್ರ್ಯಾಂಡಿಂಗ್‌ಗಾಗಿ ಬಳಸುವ ಸ್ಟ್ರಿಂಗ್ ಲಿಟರಲ್‌ಗಳು ನಿಮ್ಮ ಕೋಡ್‌ಬೇಸ್‌ನಲ್ಲಿ ಅನನ್ಯವಾಗಿವೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವುದು ಮುಖ್ಯ.

ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳು ಮತ್ತು ಬಳಕೆಯ ಸಂದರ್ಭಗಳು

ರಚನಾತ್ಮಕ ಹೊಂದಾಣಿಕೆಯನ್ನು ಮೀರಿ ಟೈಪ್ ಸುರಕ್ಷತೆಯನ್ನು ಜಾರಿಗೊಳಿಸಬೇಕಾದ ವಿವಿಧ ಸನ್ನಿವೇಶಗಳಿಗೆ ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಅನ್ನು ಅನ್ವಯಿಸಬಹುದು.

ಐಡಿಗಳು (IDs)

UserID, ProductID, ಮತ್ತು OrderID ನಂತಹ ವಿವಿಧ ರೀತಿಯ ಐಡಿಗಳನ್ನು ಹೊಂದಿರುವ ಸಿಸ್ಟಮ್ ಅನ್ನು ಪರಿಗಣಿಸಿ. ಈ ಎಲ್ಲಾ ಐಡಿಗಳನ್ನು ಸಂಖ್ಯೆಗಳು ಅಥವಾ ಸ್ಟ್ರಿಂಗ್‌ಗಳಾಗಿ ಪ್ರತಿನಿಧಿಸಬಹುದು, ಆದರೆ ನೀವು ಆಕಸ್ಮಿಕವಾಗಿ ವಿವಿಧ ಐಡಿ ಟೈಪ್‌ಗಳನ್ನು ಮಿಶ್ರಣ ಮಾಡುವುದನ್ನು ತಡೆಯಲು ಬಯಸುತ್ತೀರಿ.


const UserIDBrand = Symbol('UserID');
type UserID = string & { readonly [UserIDBrand]: unique symbol };

const ProductIDBrand = Symbol('ProductID');
type ProductID = string & { readonly [ProductIDBrand]: unique symbol };

function getUser(id: UserID): { name: string } {
  // ... fetch user data
  return { name: "Alice" };
}

function getProduct(id: ProductID): { name: string, price: number } {
  // ... fetch product data
  return { name: "Example Product", price: 25 };
}

function createUserID(id: string): UserID {
  return id as UserID;
}

function createProductID(id: string): ProductID {
  return id as ProductID;
}

const userID = createUserID('user123');
const productID = createProductID('product456');

const user = getUser(userID);
const product = getProduct(productID);

console.log("User:", user);
console.log("Product:", product);

// Uncommenting the next line will cause a type error
// const invalidCall = getUser(productID);

ಈ ಉದಾಹರಣೆಯು, UserID ಅನ್ನು ನಿರೀಕ್ಷಿಸುವ ಫಂಕ್ಷನ್‌ಗೆ ProductID ಅನ್ನು ಪಾಸ್ ಮಾಡುವುದನ್ನು ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಹೇಗೆ ತಡೆಯಬಹುದು ಎಂಬುದನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ, ಇದರಿಂದ ಟೈಪ್ ಸುರಕ್ಷತೆ ಹೆಚ್ಚಾಗುತ್ತದೆ.

ಡೊಮೈನ್-ನಿರ್ದಿಷ್ಟ ಮೌಲ್ಯಗಳು

ನಿರ್ಬಂಧಗಳೊಂದಿಗೆ ಡೊಮೈನ್-ನಿರ್ದಿಷ್ಟ ಮೌಲ್ಯಗಳನ್ನು ಪ್ರತಿನಿಧಿಸಲು ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಉಪಯುಕ್ತವಾಗಬಹುದು. ಉದಾಹರಣೆಗೆ, ನೀವು ಶೇಕಡಾವಾರುಗಳಿಗಾಗಿ ಒಂದು ಟೈಪ್ ಅನ್ನು ಹೊಂದಿರಬಹುದು, ಅದು ಯಾವಾಗಲೂ 0 ಮತ್ತು 100 ರ ನಡುವೆ ಇರಬೇಕು.


const PercentageBrand = Symbol('Percentage');
type Percentage = number & { readonly [PercentageBrand]: unique symbol };

function createPercentage(value: number): Percentage {
  if (value < 0 || value > 100) {
    throw new Error('Percentage must be between 0 and 100');
  }
  return value as Percentage;
}

function applyDiscount(price: number, discount: Percentage): number {
  return price * (1 - discount / 100);
}

try {
  const discount = createPercentage(20);
  const discountedPrice = applyDiscount(100, discount);
  console.log("Discounted Price:", discountedPrice);

  // Uncommenting the next line will cause an error during runtime
  // const invalidPercentage = createPercentage(120);
} catch (error) {
  console.error(error);
}

ಈ ಉದಾಹರಣೆಯು ರನ್‌ಟೈಮ್ ಸಮಯದಲ್ಲಿ ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್‌ನ ಮೌಲ್ಯದ ಮೇಲೆ ನಿರ್ಬಂಧವನ್ನು ಹೇಗೆ ಜಾರಿಗೊಳಿಸುವುದು ಎಂಬುದನ್ನು ತೋರಿಸುತ್ತದೆ. ಟೈಪ್ ಸಿಸ್ಟಮ್ Percentage ಮೌಲ್ಯವು ಯಾವಾಗಲೂ 0 ಮತ್ತು 100 ರ ನಡುವೆ ಇರುತ್ತದೆ ಎಂದು ಖಾತರಿಪಡಿಸಲು ಸಾಧ್ಯವಾಗದಿದ್ದರೂ, createPercentage ಫಂಕ್ಷನ್ ಈ ನಿರ್ಬಂಧವನ್ನು ರನ್‌ಟೈಮ್ ಸಮಯದಲ್ಲಿ ಜಾರಿಗೊಳಿಸಬಹುದು. ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್‌ಗಳ ರನ್‌ಟೈಮ್ ಮೌಲ್ಯಮಾಪನವನ್ನು ಜಾರಿಗೊಳಿಸಲು ನೀವು io-ts ನಂತಹ ಲೈಬ್ರರಿಗಳನ್ನು ಸಹ ಬಳಸಬಹುದು.

ದಿನಾಂಕ ಮತ್ತು ಸಮಯದ ನಿರೂಪಣೆಗಳು

ವಿವಿಧ ಫಾರ್ಮ್ಯಾಟ್‌ಗಳು ಮತ್ತು ಸಮಯ ವಲಯಗಳಿಂದಾಗಿ ದಿನಾಂಕಗಳು ಮತ್ತು ಸಮಯಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದು ಕಷ್ಟಕರವಾಗಿರುತ್ತದೆ. ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ವಿವಿಧ ದಿನಾಂಕ ಮತ್ತು ಸಮಯದ ನಿರೂಪಣೆಗಳ ನಡುವೆ ವ್ಯತ್ಯಾಸವನ್ನು ಗುರುತಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.


const UTCDateBrand = Symbol('UTCDate');
type UTCDate = string & { readonly [UTCDateBrand]: unique symbol };

const LocalDateBrand = Symbol('LocalDate');
type LocalDate = string & { readonly [LocalDateBrand]: unique symbol };

function createUTCDate(dateString: string): UTCDate {
  // Validate that the date string is in UTC format (e.g., ISO 8601 with Z)
  if (!/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/.test(dateString)) {
    throw new Error('Invalid UTC date format');
  }
  return dateString as UTCDate;
}

function createLocalDate(dateString: string): LocalDate {
  // Validate that the date string is in local date format (e.g., YYYY-MM-DD)
  if (!/\d{4}-\d{2}-\d{2}/.test(dateString)) {
    throw new Error('Invalid local date format');
  }
  return dateString as LocalDate;
}

function convertUTCDateToLocalDate(utcDate: UTCDate): LocalDate {
  // Perform time zone conversion
  const date = new Date(utcDate);
  const localDateString = date.toLocaleDateString();
  return createLocalDate(localDateString);
}

try {
  const utcDate = createUTCDate('2024-01-20T10:00:00.000Z');
  const localDate = convertUTCDateToLocalDate(utcDate);
  console.log("UTC Date:", utcDate);
  console.log("Local Date:", localDate);
} catch (error) {
  console.error(error);
}

ಈ ಉದಾಹರಣೆಯು UTC ಮತ್ತು ಸ್ಥಳೀಯ ದಿನಾಂಕಗಳ ನಡುವೆ ವ್ಯತ್ಯಾಸವನ್ನು ತೋರಿಸುತ್ತದೆ, ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ನ ವಿವಿಧ ಭಾಗಗಳಲ್ಲಿ ನೀವು ಸರಿಯಾದ ದಿನಾಂಕ ಮತ್ತು ಸಮಯದ ನಿರೂಪಣೆಯೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದೀರಿ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ. ರನ್‌ಟೈಮ್ ಮೌಲ್ಯಮಾಪನವು ಸರಿಯಾದ ಫಾರ್ಮ್ಯಾಟ್‌ನಲ್ಲಿರುವ ದಿನಾಂಕದ ಸ್ಟ್ರಿಂಗ್‌ಗಳನ್ನು ಮಾತ್ರ ಈ ಟೈಪ್‌ಗಳಿಗೆ ನಿಯೋಜಿಸಬಹುದು ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.

ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಬಳಸಲು ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು

ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಅನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸಲು, ಈ ಕೆಳಗಿನ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಪರಿಗಣಿಸಿ:

ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್‌ನ ಅನುಕೂಲಗಳು

ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್‌ನ ಅನಾನುಕೂಲಗಳು

ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್‌ಗೆ ಪರ್ಯಾಯಗಳು

ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ನಾಮಿನಲ್ ಟೈಪಿಂಗ್ ಸಾಧಿಸಲು ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಒಂದು ಪ್ರಬಲ ತಂತ್ರವಾಗಿದ್ದರೂ, ನೀವು ಪರಿಗಣಿಸಬಹುದಾದ ಪರ್ಯಾಯ ವಿಧಾನಗಳಿವೆ.

ಅಪಾರದರ್ಶಕ ಟೈಪ್ಸ್ (Opaque Types)

ಅಪಾರದರ್ಶಕ ಟೈಪ್ಸ್ ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್‌ಗೆ ಹೋಲುತ್ತವೆ ಆದರೆ ಆಧಾರವಾಗಿರುವ ಟೈಪ್ ಅನ್ನು ಮರೆಮಾಡಲು ಹೆಚ್ಚು ಸ್ಪಷ್ಟವಾದ ಮಾರ್ಗವನ್ನು ಒದಗಿಸುತ್ತವೆ. ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಅಪಾರದರ್ಶಕ ಟೈಪ್ಸ್‌ಗೆ ಅಂತರ್ನಿರ್ಮಿತ ಬೆಂಬಲವಿಲ್ಲ, ಆದರೆ ನೀವು ಅವುಗಳನ್ನು ಮಾಡ್ಯೂಲ್‌ಗಳು ಮತ್ತು ಖಾಸಗಿ ಸಿಂಬಲ್‌ಗಳನ್ನು ಬಳಸಿ ಅನುಕರಿಸಬಹುದು.

ಕ್ಲಾಸ್‌ಗಳು

ಕ್ಲಾಸ್‌ಗಳನ್ನು ಬಳಸುವುದು ವಿಭಿನ್ನ ಟೈಪ್‌ಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ಹೆಚ್ಚು ಆಬ್ಜೆಕ್ಟ್-ಓರಿಯೆಂಟೆಡ್ ವಿಧಾನವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಕ್ಲಾಸ್‌ಗಳು ರಚನಾತ್ಮಕವಾಗಿ ಟೈಪ್ ಮಾಡಲ್ಪಟ್ಟಿದ್ದರೂ, ಅವು ಕಾಳಜಿಗಳ ಸ್ಪಷ್ಟ ಪ್ರತ್ಯೇಕತೆಯನ್ನು ನೀಡುತ್ತವೆ ಮತ್ತು ಮೆಥಡ್‌ಗಳ ಮೂಲಕ ನಿರ್ಬಂಧಗಳನ್ನು ಜಾರಿಗೊಳಿಸಲು ಬಳಸಬಹುದು.

`io-ts` ಅಥವಾ `zod` ನಂತಹ ಲೈಬ್ರರಿಗಳು

ಈ ಲೈಬ್ರರಿಗಳು ಅತ್ಯಾಧುನಿಕ ರನ್‌ಟೈಮ್ ಟೈಪ್ ಮೌಲ್ಯಮಾಪನವನ್ನು ಒದಗಿಸುತ್ತವೆ ಮತ್ತು ಕಂಪೈಲ್-ಟೈಮ್ ಮತ್ತು ರನ್‌ಟೈಮ್ ಸುರಕ್ಷತೆಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್‌ಗಳೊಂದಿಗೆ ಸಂಯೋಜಿಸಬಹುದು.

ತೀರ್ಮಾನ

ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್ ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಸ್ಟ್ರಕ್ಚರಲ್ ಟೈಪ್ ಸಿಸ್ಟಮ್‌ನಲ್ಲಿ ಟೈಪ್ ಸುರಕ್ಷತೆ ಮತ್ತು ಕೋಡ್ ಸ್ಪಷ್ಟತೆಯನ್ನು ಹೆಚ್ಚಿಸಲು ಒಂದು ಅಮೂಲ್ಯ ಸಾಧನವಾಗಿದೆ. ಒಂದು ಟೈಪ್‌ಗೆ "ಬ್ರ್ಯಾಂಡ್" ಸೇರಿಸುವ ಮೂಲಕ, ನೀವು ನಾಮಿನಲ್ ಟೈಪಿಂಗ್ ಅನ್ನು ಜಾರಿಗೊಳಿಸಬಹುದು ಮತ್ತು ರಚನಾತ್ಮಕವಾಗಿ ಒಂದೇ ರೀತಿ ಇರುವ ಆದರೆ ತಾರ್ಕಿಕವಾಗಿ ವಿಭಿನ್ನವಾದ ಟೈಪ್‌ಗಳ ಆಕಸ್ಮಿಕ ಮಿಶ್ರಣವನ್ನು ತಡೆಯಬಹುದು. ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಸ್ವಲ್ಪ ಸಂಕೀರ್ಣತೆ ಮತ್ತು ಓವರ್‌ಹೆಡ್ ಅನ್ನು ಪರಿಚಯಿಸಿದರೂ, ಸುಧಾರಿತ ಟೈಪ್ ಸುರಕ್ಷತೆ ಮತ್ತು ಕೋಡ್ ನಿರ್ವಹಣೆಯ ಪ್ರಯೋಜನಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಅನಾನುಕೂಲಗಳನ್ನು ಮೀರಿಸುತ್ತವೆ. ಒಂದು ಮೌಲ್ಯವು ಅದರ ರಚನೆಯನ್ನು ಲೆಕ್ಕಿಸದೆ ಒಂದು ನಿರ್ದಿಷ್ಟ ಟೈಪ್‌ಗೆ ಸೇರಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬೇಕಾದ ಸನ್ನಿವೇಶಗಳಲ್ಲಿ ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಬಳಸುವುದನ್ನು ಪರಿಗಣಿಸಿ.

ಸ್ಟ್ರಕ್ಚರಲ್ ಮತ್ತು ನಾಮಿನಲ್ ಟೈಪಿಂಗ್ ಹಿಂದಿನ ತತ್ವಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವ ಮೂಲಕ ಮತ್ತು ಈ ಲೇಖನದಲ್ಲಿ ವಿವರಿಸಲಾದ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಅನ್ವಯಿಸುವ ಮೂಲಕ, ನೀವು ಹೆಚ್ಚು ದೃಢವಾದ ಮತ್ತು ನಿರ್ವಹಿಸಬಲ್ಲ ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್ ಕೋಡ್ ಬರೆಯಲು ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಅನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸಿಕೊಳ್ಳಬಹುದು. ಕರೆನ್ಸಿಗಳು ಮತ್ತು ಐಡಿಗಳನ್ನು ಪ್ರತಿನಿಧಿಸುವುದರಿಂದ ಹಿಡಿದು ಡೊಮೈನ್-ನಿರ್ದಿಷ್ಟ ನಿರ್ಬಂಧಗಳನ್ನು ಜಾರಿಗೊಳಿಸುವವರೆಗೆ, ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ನಿಮ್ಮ ಪ್ರಾಜೆಕ್ಟ್‌ಗಳಲ್ಲಿ ಟೈಪ್ ಸುರಕ್ಷತೆಯನ್ನು ಹೆಚ್ಚಿಸಲು ಒಂದು ಹೊಂದಿಕೊಳ್ಳುವ ಮತ್ತು ಶಕ್ತಿಯುತ ಯಾಂತ್ರಿಕ ವ್ಯವಸ್ಥೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ.

ನೀವು ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್‌ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ, ಟೈಪ್ ಮೌಲ್ಯಮಾಪನ ಮತ್ತು ಜಾರಿಗಾಗಿ ಲಭ್ಯವಿರುವ ವಿವಿಧ ತಂತ್ರಗಳು ಮತ್ತು ಲೈಬ್ರರಿಗಳನ್ನು ಅನ್ವೇಷಿಸಿ. ಟೈಪ್ ಸುರಕ್ಷತೆಗೆ ಸಮಗ್ರ ವಿಧಾನವನ್ನು ಸಾಧಿಸಲು ಬ್ರ್ಯಾಂಡೆಡ್ ಟೈಪ್ಸ್ ಅನ್ನು io-ts ಅಥವಾ zod ನಂತಹ ರನ್‌ಟೈಮ್ ಮೌಲ್ಯಮಾಪನ ಲೈಬ್ರರಿಗಳೊಂದಿಗೆ ಸಂಯೋಜಿಸಿ ಬಳಸುವುದನ್ನು ಪರಿಗಣಿಸಿ.