دسترسی سریع
تایپ های اولیه (Primitive Types)
1. number
برای اعداد (صحیح و اعشاری)، مانند 12 یا 12.5
2. string
برای رشتههای متنی (در داخل "کوتیشن")، مانند "Hello"
3. boolean
برای مقادیر منطقی true یا false
4. null
یک متغیر عمداً مقدار ندارد، این مقدار به صورت دستی توسط برنامهنویس اختصاص داده میشود
5. undefined
به معنای این است که یک متغیر تعریف شده ولی هنوز مقداری به آن اختصاص داده نشده است
تایپهای مجموعهای (Collection Types)
1. array
آرایه یا یک لیست از مقادیر مشخص
برای ساختن آرایهها در تایپاسکریپت، میتوانید از تایپهای اولیه استفاده کنید و با اضافه کردن یک جفت [] به آنها، یک آرایه از همان نوع ایجاد کنید.
2. tuple
آرایهای با طول و ترتیب مشخص داشته باشید که هر عنصر آن میتواند نوع متفاوتی داشته باشد
برای ساختن تاپلها در تایپاسکریپت، میتوانید از تایپهای اولیه در [] یک تاپل ایجاد کنید.
تایپهای خاص (Special Types)
1. any
متغییر هایی که به آنها تایپ any داده میشود میتوانند هر مقداری در خود ذخیره کنند(با احتیاط استفاده شود).
2. unknow
یک تایپ عمومیتر و امنتر از any است. این تایپ میتواند هر نوعی باشد، اما شما باید آن را قبل از استفاده به یک تایپ مشخص تبدیل کنید.
3. void
برای توابعی که هیچ مقداری بر نمیگردانند (یک عملیات را انجام میدهد ولی چیزی return نمیکنند).
4. never
برای موارد غیرممکن مثل تابعی که خطا پرتاب میکند (throw new Error).
5. object
فقط میگوید مقدار یک نوع شیء است، اما نمیگوید ساختار آن چیست بهتر است از interface یا type برای تعریف ساختار اشیاء استفاده کنید که در ادامه بررسی میکنیم.
تایپهای ترکیبی (Union و Intersection)
1. Union Type
با عملگر or تایپ هارو باهم ترکیب میکند
let name = string | null
یکی از ترکیب تایپهای پر استفاده در تایپاسکریپت است برای زمانی که مشخص نیست مقدار name را دراختیار داریم یا خیر.
2. Intersection Type
با عملگر and تایپ هارو باهم ترکیب میکند
let person: {name: string} & {age: number}
این مدل ترکیب به ندرت استفاده میشود نشان میدهد آبجکت person هم باید name و هم age داشته باشد.
تایپهای سفارشی
در تایپاسکریپت، هم interface و هم type برای تعریف تایپهای سفارشی استفاده میشوند، اما تفاوتهایی در ویژگیها و کاربردهای آنها وجود دارد.
کدام را انتخاب کنیم؟
- اگر نیاز به ساختاردهی اشیاء و گسترش تدریجی دارید، از interface استفاده کنید
- اگر نیاز به Union Types یا ساختارهای پیچیدهتر دارید، از type استفاده کنید
interface Person {name:string,age:number}
type Person = {name:string,age:number}
تایپ Enumerations (enum)
enum برای مدیریت مجموعهای از مقادیر ثابت و معنادار عالی است، به خصوص زمانی که مقادیر باید تکرار شوند یا در چند جای مختلف برنامه استفاده شوند.
enum Status {
Success = "SUCCESS",
Failure = "FAILURE",
Pending = "PENDING",
};
const currentStatus: Status = Status.Success;
currentStatus --> "SUCCESS"
گاهی به جای enum میتوان از تایپهای یکتا یا شیءهای ثابت استفاده کرد. اما enum قابلیتهای بیشتری مانند دسترسی دوطرفه و خوانایی بهتر در موقعیتهای خاص ارائه میدهد.
تایپهای DOM
تایپهای DOM (Document Object Model) در تایپاسکریپت به شما کمک میکنند تا هنگام کار با عناصر HTML، رفتارها و ویژگیهای آنها را به صورت دقیقتر مدیریت کنید.
تایپ های عناصر HTML
یادگیری تایپهای HTML بسیار ساده است. کافی است نام تگ را بدانیم و آن را به این صورت بنویسیم: ابتدا کلمه HTML و در انتها Element.
مانند : HTMLDivElement,HTMLSpanElement, ...
تایپهای مرتبط با رویدادها (Events)
تایپ های Event ها در متدهای Event Handlers ویژگیهای داخلی عناصر HTML هستند که به شما امکان میدهند یک تابع را به یک رویداد خاص متصل کنید.
- Event: برای رویدادهای عمومی.
- MouseEvent: برای رویدادهایی که معمولا موس باعث اجرا شدن آنها میشود مانند click, mousemove.
- KeyboardEvent: برای رویدادهایی که معمولا صفحه کلید باعث اجرا شدن آنها میشود مانند keypress, keydown.
- FocusEvent: برای رویدادهای focus, blur.
- InputEvent: برای تغییرات در فیلدهای ورودی مانند input.
این های تایپهای پر استفاده DOM هستند تایپ های دیگری هم مانند Document,Window,Location,... وجود دارند ولی استفاده از آنها بسیار نادر است.
تمرین : ارسال اطلاعات با کلیک
ارسال درخواست HTTP بعد از کلیک شدن دکمه و سپس دریافت پاسخ سرور.
const usernameInput = document.getElementById("username") as HTMLInputElement | null;const PasswordInput = document.getElementById("password") as HTMLInputElement | null;const submitButton = document.getElementById("submit-button") as HTMLButtonElement | null;interface UserType {username:stringpassword:string}interface ResponseTypes{access_token:string|undefined,refresh_token:string|undefined,}const sendData = async () :Promise<void> =>{const userObject:UserType = {username: usernameInput?.value || "NotExists",password: PasswordInput?.value || "NotExists",}const resposne:Response = await fetch("BACKEND_DOMAIN",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(userObject)})if (resposne.ok){const result:ResponseTypes = await resposne.json();// انجام عملیات احراز هویت}}if (submitButton !== null){submitButton.addEventListener("click",sendData)}
اگر مطمئن هستید که عنصر دریافتی حتما وجود دارد میتوانید از null رو حذف کنید.