← Back to TypeScript Course | Chapter 23: Performance and Best Practices | Lesson 2 of 7

any से बेहतर unknown

unknown एक ऐसी value represent करता है जिसका type अभी नहीं पता जबकि TypeScript की safety checks enabled रहती हैं। एक unknown value उपयोग करने से पहले, आपको इसे एक ज़्यादा specific type में narrow करना होगा।
Syntax
typescript
let value: unknown = someValue;

if (typeof value === "string") {
    // value is narrowed to string here
}

unknown किसी भी Value को Accept करता है

Specific types के विपरीत, unknown एक string, एक number, एक object, एक array, या कुछ और भी रख सकता है — लेकिन any के विपरीत, यह properly narrow होने तक उस value पर unsafe operations को actively रोकता है।

उदाहरण: unknown Accepts Any Value

typescript
let value: unknown = "hello";
value = 42;
value = { key: "value" };
console.log(value);

unknown को Narrow करना

एक unknown value को typeof, instanceof, Array.isArray, direct property checks, या एक custom type guard उपयोग करके narrow करें — इनमें से कोई भी technique TypeScript को बाद में value को ज़्यादा specific मानने के लिए काफी information देती है।

उदाहरण: Narrowing unknown

typescript
function describe(value: unknown): string {
  if (typeof value === "string") return `String: ${value}`;
  if (Array.isArray(value)) return `Array of ${value.length}`;
  return "Unknown type";
}
console.log(describe([1, 2, 3]));

JSON Data के लिए unknown

TypeScript की standard library declarations में JSON.parse का return type any है, इसलिए external JSON से आने वाले data को untrusted माना जाना चाहिए — parsed result को एक unknown-typed variable में assign करना इसे use से पहले validate करने को encourage करता है।

उदाहरण: unknown for JSON Data

typescript
const raw: unknown = JSON.parse('{"name":"Ravi"}');
if (typeof raw === "object" && raw !== null && "name" in raw) {
  console.log((raw as { name: string }).name);
}

Error Handling में unknown

Caught errors को Error के बजाय unknown माना जाना चाहिए, क्योंकि JavaScript ऐसी values throw करने की permission देता है जो बिल्कुल Error objects नहीं हैं — message या इस पर कोई और property पढ़ने से पहले caught value को narrow करें।

उदाहरण: unknown in Error Handling

typescript
try {
  throw new Error("failed");
} catch (err: unknown) {
  if (err instanceof Error) console.log(err.message);
}

Generic APIs में unknown

unknown generic utility functions के लिए well suited है जहां implementation को value की shape के बारे में कुछ भी मान नहीं लेना चाहिए, internally safety preserve करते हुए callers को जो भी type चाहिए supply करने देते हुए।

उदाहरण: unknown in Generic APIs

typescript
function storeValue(key: string, value: unknown): void {
  console.log(`Storing ${key} without assuming its shape`);
}
storeValue("config", { debug: true });
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. एक unknown value को सीधे उपयोग करना, जैसे value.length, जो narrow होने तक एक error है।
  2. typeof से check करने के बजाय as string से cast करना, जो problem को फिर से hide कर देता है।
  3. यह मान लेना कि JSON.parse unknown return करता है, जब यह any return करता है और इसे खुद unknown में assign करना चाहिए।
🔒

Chapter Quiz — Complete all 7 topics to unlock

0/7 topics done

Complete these topics first:

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.