logo
تایپ های any, never, unknown در تایپ اسکریپت
تایپ اسکریپت

تایپ اسکریپت

04 شهریور 1402

سلام دوستان امیدوارم خوب باشید و همیشه درحال یادگیری🧑‍💻. توی این قسمت اومدیم سه تایپ:

  • any
  • never
  • unknown

رو بررسی کردیم و از همه مهم تر اینکه کجا و چه زمانی باید از این سه نوع تایپ استفاده کنیم؟


تایپ any

تایپ any در لغت به معنای "هر چیز" هست. any در واقع یک راه فراری هست که به تایپ اسکریپت بگیم "من هیچ ایده ایی درباره تایپ این ندارم پس تایپش رو چک نکن!"

تا جایی که امکان داره نباید از any استفاده کنیم، چون وقتی از any استفاده می‌کنیم انگار داریم از جاوا اسکریپت استفاده می‌کنیم.

let a:any = "Hello world"

// We lost type safety!
a = 123;

const myFunctions = (args: any) => {
 // ..
// ...
}


تایپ unknown

تایپ unknown شباهت زیادی به any دارد، می‌تواند هر مقداری را بپذیرد اما در زمان اجرا (runtime) باید تایپش رو چک و مشخص کنیم. مثلا ما به متغیر num میایم تایپ unknown میدیم:

let num :unknown;

حالا این متغیر میتونه شبیه 12 یا "12" باشه، یعنی یا number یا string باشه. در اینصورت ما به این شکل می‌تونیم عمل کنیم:

let num :unknown;

if(typeof num === "string") {
   // do something for string 
} else if(typeof num === "number") {
  // do something for number
}

در واقع تایپ‌اسکریپت از ما انتظار داره قبل از انجام عملیاتی که مربوط به تایپ مثلا number است ثابت کنیم num از نوع number است.

یک مثال هم برای تایپ string ببینید:

const myFun = (args: unknown) => {

   // this will give you an error since the type is unknown.
   const length = args.length;

  // we are checking if args is having string type or not.
    if(typeof args === "string") {
           return args.slice(0,2);
    }
}


تایپ never

تایپ never مقداری را بیان می‌کند که هیچ‌گاه وجود نخواهد داشت. معمولا از never برای تابع ها استفاده می‌کنند.

داخل جاوا اسکریپت، میدونیم که اگه تابع چیزی برنگردونه، در واقع داره undefined رو برمیگردونه.

const Greeting = () => {
  console.log("Hello world");
}
console.log(Greeting());

داخل کد بالا console.log آخری داره undefined رو برمیگردونه. اما اگر از neverاستفاده کنیم:

const Greeting = () :never => {
  console.log("Hello world");
}

اینجا ارور داریم، اما چرا؟ چون تابع ما داره undefined رو برمیگردونه. نوع never برای یک فانکشن یعنی "این فانکشن هرگز به انتها نخواهد رسید!"

در نتیجه دو جای رایج برای استفاده از تایپ any:

  1. تابعی که حلقه‌ی بینهایت داشته باشه (شاید یه کاری رو میخواد همیشه تا ابد چک کنه ... )
  2. تابعی که یک ()throw new Error داشته باشه

// When function throws error
const iWillThrowError = ():never => {
    throw new Error("BOOM");
}
// when we use something like infinity loop 
const infinite = () :never => {
    while(1) {
       console.log("How you doing?");
    }
}

تفاوت void و any

حالا تفاوت void و any چیه؟ تایپ‌اسکریپت تایپ‌های متفاوتی برای انواع مختلف مفهوم پوچ و تهی معرفی می کنه. هنگامی که خروجی یک تابع void است، تابع یک خروجی با مقدار undefined یا null داره. اما در مورد never، تابع هیچ‌گاه به اتمام نمی‌رسد و خروجی ندارد. درواقع برنامه بعد از رسیدن به never متوقف‌ می‌شود.


خوب بچه ها امیدوارم این قسمت براتون مفید بوده باشه. خوشحال میشم اگه انتقادی یا پیشنهادی دارید برام بنویسید تا محتوای بهتری تولید بشه ❤️

منابع:

این پست برات مفید بود؟

0

heart

0

like

0

happy

0

sad