تایپ اسکریپت
04 شهریور 1402
تایپ های any, never, unknown در تایپ اسکریپت
سلام دوستان امیدوارم خوب باشید و همیشه درحال یادگیری🧑💻. توی این قسمت اومدیم سه تایپ:
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
:
- تابعی که حلقهی بینهایت داشته باشه (شاید یه کاری رو میخواد همیشه تا ابد چک کنه ... )
- تابعی که یک
()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
0
0
0
نظرات