جاوااسکریپت - چرا کلیدواژه import مفید است؟
در تایپاسکریپت میتوانم یک ماژول\namespace دیگر را به این صورت وارد کنم:
namespace Shapes2 {
import shapes = Shapes;
var bar = new shapes.Bar();
}
با این حال، من میتوانم به همان راحتی مستقیماً به فضای نام اشاره کنم.
namespace Shapes3{
var shapes = Shapes;
var bar = new shapes.Bar();
}
آیا import کاری مفید انجام میدهد؟
کی میخواهم import را تایپ کنم به جای var؟
پاسخ شماره ۱
در آن مورد خاص، نه، این هیچ کار مفیدی انجام نمیدهد. این نحو برای ایجاد نام مستعار برای فضای نامها است. مثال شما در موقعیتی مانند این مفیدتر خواهد بود:
namespace Shapes2 {
import Rects = Shapes.Rectangles;
var bar = new Rects.Red();
// Instead of `var bar = new Shapes.Rectangles.Red()`
}
در اصل، این فقط یک روش برای کاهش مقدار تایپی است که انجام میدهید. به نوعی، این جایگزینی برای using در C# است. اما چگونه این با var متفاوت است؟
این مشابه استفاده از
varاست، اما همچنین بر معانی نوع و فضای نام نماد وارد شده نیز عمل میکند. به طور مهم، برای مقادیر،importیک ارجاع متمایز از نماد اصلی است، بنابراین تغییرات درvarمستعار در متغیر اصلی منعکس نخواهد شد.
منبع
یک نمونه خوب از این را میتوان در مشخصات یافت:
namespace A {
export interface X { s: string }
}
namespace B {
var A = 1;
import Y = A;
}
‘Y’ یک نام مستعار محلی برای فضای نام غیر نمونهسازی شده ‘A’ است. اگر اعلان ‘A’ به گونهای تغییر کند که ‘A’ به یک فضای نام نمونهسازی شده تبدیل شود، برای مثال با گنجاندن یک اعلان متغیر در ‘A’، دستور import در ‘B’ که در بالا آمده است یک خطا خواهد بود، زیرا عبارت ‘A’ به نمونه فضای نام ‘A’ اشاره نمیکند.
وقتی یک دستور import شامل یک مشخصکننده export باشد، تمام معانی نام مستعار محلی صادر میشوند.
پاسخ شماره ۲
از کتاب راهنمای TypeScript
یک روش دیگر برای سادهتر کردن کار با فضاهای نام، استفاده از import q=x.y.z برای ایجاد نامهای کوتاهتر برای اشیاء پرکاربرد است. این را با نحوهی نوشتن import x=require("name") که برای بارگذاری ماژولها استفاده میشود، اشتباه نگیرید، این نحو فقط یک نام مستعار برای نماد مشخصشده ایجاد میکند. شما میتوانید از این نوع واردات (که معمولاً به آنها نام مستعار میگویند) برای هر نوع شناسهای استفاده کنید، از جمله اشیائی که از واردات ماژول ایجاد شدهاند.
