প্রসারিত - কিছু মন্তব্যের ভিত্তিতে আরও বিশদ সরবরাহ করতে
ভূল
ত্রুটি TS2306: ফাইল 'test.ts' কোনও মডিউল নয়।
এখানে বর্ণিত সত্য থেকে আসে http://exploringjs.com/es6/ch_modules.html
17. মডিউল
এই অধ্যায়টি ব্যাখ্যা করে যে ECMAScript 6 এ অন্তর্নির্মিত মডিউলগুলি কীভাবে কাজ করে।
17.1 ওভারভিউ
ECMAScript 6 এ মডিউলগুলি ফাইলগুলিতে সংরক্ষণ করা হয়। প্রতি ফাইল প্রতি এক মডিউল এবং মডিউল প্রতি একটি ফাইল আছে। মডিউল থেকে জিনিস রফতানি করার দুটি উপায় আপনার কাছে রয়েছে। এই দুটি উপায় মিশ্রিত করা যেতে পারে তবে এগুলি পৃথকভাবে ব্যবহার করা ভাল।
17.1.1 একাধিক নামি রফতানি
একাধিক নামযুক্ত রফতানি হতে পারে:
//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
return x * x;
}
export function diag(x, y) {
return sqrt(square(x) + square(y));
}
...
17.1.2 একক ডিফল্ট রফতানি
একক ডিফল্ট রফতানি হতে পারে। উদাহরণস্বরূপ, একটি ফাংশন:
//------ myFunc.js ------
export default function () { ··· } // no semicolon!
উপরের ভিত্তিতে export
আমাদের টেস্ট.জেএস ফাইলের অংশ হিসাবে দরকার need আসুন এর বিষয়বস্তু এই মত সামঞ্জস্য করুন:
// test.js - exporting es6
export module App {
export class SomeClass {
getName(): string {
return 'name';
}
}
export class OtherClass {
getName(): string {
return 'name';
}
}
}
এবং এখন আমরা এই ছুঁড়ে দেওয়া উপায়ে এটি আমদানি করতে পারি:
import * as app1 from "./test";
import app2 = require("./test");
import {App} from "./test";
এবং আমরা এর মতো আমদানি করা জিনিসগুলি গ্রাস করতে পারি:
var a1: app1.App.SomeClass = new app1.App.SomeClass();
var a2: app1.App.OtherClass = new app1.App.OtherClass();
var b1: app2.App.SomeClass = new app2.App.SomeClass();
var b2: app2.App.OtherClass = new app2.App.OtherClass();
var c1: App.SomeClass = new App.SomeClass();
var c2: App.OtherClass = new App.OtherClass();
এবং কার্যটি দেখতে পদ্ধতিটি কল করুন:
console.log(a1.getName())
console.log(a2.getName())
console.log(b1.getName())
console.log(b2.getName())
console.log(c1.getName())
console.log(c2.getName())
আসল অংশটি নেমস্পেসের ব্যবহারে জটিলতার পরিমাণ হ্রাস করতে সহায়তা করার চেষ্টা করছে
আসল অংশ:
আমি সত্যিই দৃ Q়ভাবে এই প্রশ্নোত্তর যাচাই করার পরামর্শ দেব:
আমাকে প্রথম বাক্যটি উদ্ধৃত কর:
বাহ্যিক মডিউলগুলিতে "নেমস্পেস" ব্যবহার করবেন না।
এটি করবেন না।
সিরিয়াসলি। স্টপ।
...
এই ক্ষেত্রে, আমাদের কেবল module
অভ্যন্তরের দরকার নেই test.ts
। এটি এর সামগ্রীতে সামঞ্জস্য হতে পারে test.ts
:
export class SomeClass
{
getName(): string
{
return 'name';
}
}
এখানে আরও পড়ুন
পূর্ববর্তী উদাহরণে, আমরা যখন প্রতিটি বৈধকারক গ্রাস করি তখন প্রতিটি মডিউল কেবল একটি মান রফতানি করে। এই জাতীয় ক্ষেত্রে, যখন একটি একক সনাক্তকারী ঠিক পাশাপাশি কাজ করতে পারে তখন তাদের যোগ্য নামের মাধ্যমে এই চিহ্নগুলি নিয়ে কাজ করা জটিল।
export =
সিনট্যাক্স নির্দিষ্ট করে একটি একক বস্তু মডিউল থেকে রপ্তানি করা হয় । এটি কোনও শ্রেণি, ইন্টারফেস, মডিউল, ফাংশন বা এনাম হতে পারে। যখন আমদানি করা হয়, রফতানি করা প্রতীকটি সরাসরি গ্রাস করা হয় এবং কোনও নামেই যোগ্য নয়।
আমরা পরে এটির মতো গ্রাস করতে পারি:
import App = require('./test');
var sc: App.SomeClass = new App.SomeClass();
sc.getName();
এখানে আরও পড়ুন:
কিছু ক্ষেত্রে, আপনি কিছু শর্তে কেবলমাত্র একটি মডিউল লোড করতে চাইতে পারেন। টাইপস্ক্রিপ্টে, আমরা এই এবং অন্যান্য উন্নত লোডিং পরিস্থিতিতে বাস্তবায়নের জন্য নীচের চিত্রিত প্যাটার্নটি ব্যবহার করতে পারি টাইপ সুরক্ষা না হারিয়ে মডিউল লোডারগুলিকে সরাসরি অনুরোধ করতে।
সংকলক নির্গত জাভাস্ক্রিপ্টে প্রতিটি মডিউল ব্যবহৃত হয়েছে কিনা তা সনাক্ত করে। মডিউলগুলির জন্য যা কেবলমাত্র টাইপ সিস্টেমের অংশ হিসাবে ব্যবহৃত হয়, কোনও কল কল নির্গত হয় না। অব্যবহৃত রেফারেন্সগুলির এই কুলিংটি একটি ভাল পারফরম্যান্স অপটিমাইজেশন, এবং সেইগুলি মডিউলগুলির alচ্ছিক লোডিংয়েরও অনুমতি দেয়।
প্যাটার্নটির মূল ধারণাটি হ'ল আমদানি আইডি = প্রয়োজনীয় ('...') বিবৃতি আমাদের বাহ্যিক মডিউল দ্বারা উদ্ভাসিত ধরণের অ্যাক্সেস দেয়। মডিউল লোডারটি গতিশীলভাবে (প্রয়োজনীয় মাধ্যমে) ডাকা হয়, নীচে যদি ব্লকগুলিতে প্রদর্শিত হয়। এটি রেফারেন্স-কুলিং অপ্টিমাইজেশানটি উপস্থাপন করে যাতে মডিউলটি কেবল যখন প্রয়োজন হয় তখন লোড হয়। এই প্যাটার্নটি কাজ করার জন্য, এটি গুরুত্বপূর্ণ যে আমদানির মাধ্যমে সংজ্ঞায়িত প্রতীকটি কেবলমাত্র টাইপ পজিশনে ব্যবহার করা হয় (যেমন জাভাস্ক্রিপ্টে যে পদে বের হয় এমন কোনও অবস্থানে নয়)।