ولی بعضی وقت ها نمیدونیم تایپ متعیرمون رو چی بزاریم یا اصلا تایپش مشخص نسیت که در این مواقع دست به دامن `any` می شویم٬ حالا `any` جیست؟
این تایپ می تونه هرجیزی باشه (number, string, یا object) یا به عبارت دیگر شامل همه تایپ های دیگر است پس متغیر می تواند هر داده ای از هر تایپی داشته باشد
let num1 = 14 console.log(typeof(num1)) // number num1 = '14' // Error
همانطور که می بینید با اجرای کد به ارور بر می خوریم ولی با any این نوع ارور ها وجود ندارد
let num2: any = 24 console.log(typeof(num2)) // number num2 = '24' //! No error
و بدین ترتیب هیچ مشکلی پیش نمی آید :-)
حالا unknown چه تایپی هست?!
تایپ unknown
اما درمورد unknown این هم از جهاتی مثل any است
let num2: unknown = 24 console.log(typeof(num2)) // number num2 = '24' //! No error
ولی فرقش از آنجا معلوم می شود که در توابع استفاده شود
function addOne(num: any): number { return num + 1 } console.log(addOne(13)) // 14
console.log(addOne('13')) // '131'
به نتیحه دلخواهمون نریسدیم ;.(
function addOne(num: unknown): number { return num + 1 } console.log(addOne(13)) // Error
console.log(addOne('13')) // Error
حالا با unknown از این باگ فاحش مطلع شدیم ولی هنوز یک مشکل اساسی است
چگونه از unknown استفاده کنیم؟
برای حل این مشکل یک شرط کوچولو کافی است!
function addOne(num: unknown): number { if (typeof(num) == 'number'){ return num + 1 } // rest of function is optional return 1 } console.log(addOne(13)) // 14
console.log(addOne('13')) // 1
خلاصه به نطرم unknown از any بهتر است و کمتر با باگ ها دست و پنجه نرم می کنید ولی تا آنجا ممکن است از این دو اجتناب کنید (بخصوص any) و از تایپ های دیگه استفاده کنید و ...
صبر کنید تا ترفندی یاد بدهم که زندگی شما رو راحت تر می کند
فقط کافیه تو فایل tsconfig.json این دو خط کد رو اضافه کنید
noImplicitAny: true // for no any in project
strict: true // for checking type strictly
تا هرموقع از any استفاده می کنید اجازه نده:
موفق باشید !