newtype های هسکل در تایپاسکریپت؟
در هسکل میتوانیم نوعهای جدیدی (newtypes) اعلام کنیم که به ما اجازه میدهند دسترسی به نوعهای دادهای پایه را پنهان کنیم. این به ما امکان میدهد تا رابطهای برنامهنویسی ایمنتری در ماژولها ایجاد کنیم، بدون اینکه چیزهایی مانند آرایهی پایه را فاش کنیم (که باعث میشود برای کاربر کتابخانه غیرممکن باشد که چیزی خارج از محدوده دریافت کند).
آیا چیزی مشابه newtypes در تایپاسکریپت وجود دارد؟
پاسخ شماره ۱
برای اطلاع شما، یک کلاس با یک فیلد خصوصی تقریباً همان چیز است، بنابراین اینطور نیست که یک کلمه کلیدی به طور مطلق لازم باشد.
همچنین توجه داشته باشید که هدف newtype در هاسکل در واقع کپسولهسازی نیست، هرچند میتوانید از آن به آن صورت استفاده کنید - هدف آن فراهم کردن انواع مختلف برای همان نمایش ساختاری، جلوگیری از سوء استفاده تصادفی و امکان پلیمورفیسم آدهوک مبتنی بر نوع از طریق کلاسهای نوع است. data در هاسکل تقریباً به همان روش عمل میکند، به جز جزئیات پیادهسازی، تفاوت بین newtype A=A X و data A=A X بیشتر فلسفی است تا فنی.
پاسخ شماره ۲
به عنوان پیگیری این موضوع، یک راه دیگر وجود دارد که میتوانید چیزی مشابه با newtypes معرفی کنید.
شما میتوانید کارهای زیر را انجام دهید:
type Seed = number & {readonly Seed: unique symbol}
const createSeed = randomNumberBetween0And1() as Seed
const doSomethingWithSeed = (s: Seed) => {...}
doSomethingWithSeed(1) // will complain
doSomethingWithSeed(createSeed()) // Will not complain
