تایپ اسکریپت نوع اسمی: راه درست
در صورتی که نمی دانید تایپ اسمی چیست
تایپ اسکریپت یک زبان تایپ ساختاری است، اما می توان رفتار زبان تایپ اسمی را بسیار نزدیک تقلید کرد.
ما با ساده ترین روش شروع می کنیم:
type AB = { a:number, b:number, x:never}
type BA = { a:number, b:number, y:never}
const ab:AB = {a:1, b:2}
const ba:BA = ab // error !!
زمین بازی
کار می کند
اما این به اندازه کافی خوب نیست!!
امروز می خواهیم یاد بگیریم که چگونه یک نوع اسمی مناسب در Typescript ایجاد کنیم
اما ابتدا اجازه دهید بررسی کنیم که چرا روش اول به اندازه کافی خوب نیست.
ابتدا از نوع ادعا استفاده می کند. در صورت امکان از اظهار تایپ خودداری کنید، شخصاً فقط زمانی که در حال ایجاد لفافها هستم تایپ میکنم.
دوم، کاربران می توانند به ویژگی اضافی دسترسی داشته باشند: نام تجاری از طریق تایپ استاتیک در این مورد، نام تجاری ما است ab.x
و ba.y
.
ما به عنوان یک صنعتگر نمی خواهیم این اتفاق بیفتد
راه حل
declare class AB_Class {
protected x?:never
}
declare class BA_Class {
protected x?:never
}
interface AB extends AB_Class{
a:number, b:number
}
interface BA extends BA_Class{
a:number, b:number
}
const ab:AB = {a:1, b:2}
const ba:BA = ab // error !!
زمین بازی
نکته کلیدی این است که از کلاس استفاده کنید و اعلام کنید مارک های حفاظت شده اختیاری با نوع هرگز.
لازم نیست نام برندها یک نام باشد، شما می توانید نام های مختلفی را تعیین کنید.
- بدون ادعای نوع
- کاربران نمی توانند به برند دسترسی داشته باشند
حالا ممکن است بپرسید چرا protected
، چرا که نه private
?
این به این دلیل است که این مثال را در نظر بگیرید
declare class AB_Class {
private x?:never
}
بعد از tsc
تالیف، خروجی است
declare class AB_Class {
private x?
}
آیا متوجه تفاوت می شوید؟
تایپ اسکریپت نوع را حذف می کند private
و در ادعای نوع ناموفق است
پس لطفا با protected