TypeScript - Modüller
TypeScript ile yazılmış kodu düzenleme fikri ile bir modül tasarlanmıştır. Modüller genel olarak -
- Dahili Modüller
- Harici Modüller
Dahili Modül
Dahili modüller, Typescript'in önceki sürümlerinde geldi. Bu, sınıfları, arayüzleri, işlevleri bir birimde mantıksal olarak gruplamak için kullanıldı ve başka bir modüle aktarılabilir. Bu mantıksal gruplama, TypeScript'in en son sürümünde ad alanı olarak adlandırılır. Dolayısıyla dahili modüller artık kullanılmıyor, bunun yerine ad alanını kullanabiliriz. Dahili modüller hala desteklenmektedir, ancak ad alanının dahili modüller üzerinde kullanılması önerilir.
Dahili Modül Sözdizimi (Eski)
module TutorialPoint {
export function add(x, y) {
console.log(x+y);
}
}
Ad Alanı Sözdizimi (Yeni)
namespace TutorialPoint {
export function add(x, y) { console.log(x + y);}
}
Her iki durumda da oluşturulan JavaScript aynıdır
var TutorialPoint;
(function (TutorialPoint) {
function add(x, y) {
console.log(x + y);
}
TutorialPoint.add = add;
})(TutorialPoint || (TutorialPoint = {}));
Harici Modül
TypeScript'teki harici modüller, birden çok harici ortam arasındaki bağımlılıkları belirtmek ve yüklemek için mevcuttur. jsDosyalar. Sadece bir tane varsajsdosya kullanılırsa, harici modüller ilgili değildir. Geleneksel olarak JavaScript dosyaları arasındaki bağımlılık yönetimi, tarayıcı komut dosyası etiketleri (<script> </script>) kullanılarak yapılırdı. Ancak modülleri yüklerken çok doğrusal olduğu için bu genişletilebilir değildir. Bu, dosyaları birbiri ardına yüklemek yerine, modülleri yüklemek için eşzamansız seçenek olmadığı anlamına gelir. Örneğin NodeJ'ler gibi sunucu için js programlarken, komut dosyası etiketleriniz bile yoktur.
Bağımlıları yüklemek için iki senaryo vardır js tek bir ana JavaScript dosyasından dosyalar.
- İstemci Tarafı - RequireJs
- Sunucu Tarafı - NodeJs
Bir Modül Yükleyicinin Seçilmesi
Harici JavaScript dosyalarının yüklenmesini desteklemek için bir modül yükleyiciye ihtiyacımız var. Bu başka olacakjskütüphane. Tarayıcı için en yaygın kullanılan kitaplık RequieJS'dir. Bu, AMD (Asynchronous Module Definition) spesifikasyonunun bir uygulamasıdır. Dosyaları arka arkaya yüklemek yerine AMD, birbirlerine bağımlı olsalar bile hepsini ayrı ayrı yükleyebilir.
Harici Modülü Tanımlama
TypeScript'te CommonJS veya AMD'yi hedefleyen harici modül tanımlanırken, her dosya bir modül olarak kabul edilir. Bu nedenle, harici modül ile birlikte dahili modülü kullanmak isteğe bağlıdır.
TypeScript'i AMD'den CommonJs modül sistemlerine geçiriyorsanız, herhangi bir ek çalışma gerekmez. Değiştirmeniz gereken tek şey yalnızca derleyici bayrağıdır JavaScript'in aksine, CommonJ'lerden AMD'ye veya tam tersi geçişte ek yük vardır.
Harici bir modülü bildirmek için sözdizimi, 'dışa aktar' ve 'içe aktar' anahtar kelimesini kullanıyor.
Sözdizimi
//FileName : SomeInterface.ts
export interface SomeInterface {
//code declarations
}
Bildirilen modülü başka bir dosyada kullanmak için, aşağıda verildiği gibi bir import anahtar sözcüğü kullanılır. Dosya adı yalnızca hiçbir uzantı kullanılmadan belirtilmiştir.
import someInterfaceRef = require(“./SomeInterface”);
Misal
Bunu bir örnek kullanarak anlayalım.
// IShape.ts
export interface IShape {
draw();
}
// Circle.ts
import shape = require("./IShape");
export class Circle implements shape.IShape {
public draw() {
console.log("Cirlce is drawn (external module)");
}
}
// Triangle.ts
import shape = require("./IShape");
export class Triangle implements shape.IShape {
public draw() {
console.log("Triangle is drawn (external module)");
}
}
// TestShape.ts
import shape = require("./IShape");
import circle = require("./Circle");
import triangle = require("./Triangle");
function drawAllShapes(shapeToDraw: shape.IShape) {
shapeToDraw.draw();
}
drawAllShapes(new circle.Circle());
drawAllShapes(new triangle.Triangle());
AMD sistemleri için ana TypeScript dosyasını derleme komutu şöyledir:
tsc --module amd TestShape.ts
Derlemede, AMD için aşağıdaki JavaScript kodunu üretecektir.
Dosya: IShape.js
//Generated by typescript 1.8.10
define(["require", "exports"], function (require, exports) {
});
Dosya: Circle.js
//Generated by typescript 1.8.10
define(["require", "exports"], function (require, exports) {
var Circle = (function () {
function Circle() {
}
Circle.prototype.draw = function () {
console.log("Cirlce is drawn (external module)");
};
return Circle;
})();
exports.Circle = Circle;
});
Dosya: Triangle.js
//Generated by typescript 1.8.10
define(["require", "exports"], function (require, exports) {
var Triangle = (function () {
function Triangle() {
}
Triangle.prototype.draw = function () {
console.log("Triangle is drawn (external module)");
};
return Triangle;
})();
exports.Triangle = Triangle;
});
Dosya: TestShape.js
//Generated by typescript 1.8.10
define(["require", "exports", "./Circle", "./Triangle"],
function (require, exports, circle, triangle) {
function drawAllShapes(shapeToDraw) {
shapeToDraw.draw();
}
drawAllShapes(new circle.Circle());
drawAllShapes(new triangle.Triangle());
});
Ana TypeScript dosyasını derleme komutu Commonjs sistemler
tsc --module commonjs TestShape.ts
Derlemede, aşağıdaki JavaScript kodunu oluşturacaktır. Commonjs.
Dosya: Circle.js
//Generated by typescript 1.8.10
var Circle = (function () {
function Circle() {
}
Circle.prototype.draw = function () {
console.log("Cirlce is drawn");
};
return Circle;
})();
exports.Circle = Circle;
Dosya: Triangle.js
//Generated by typescript 1.8.10
var Triangle = (function () {
function Triangle() {
}
Triangle.prototype.draw = function () {
console.log("Triangle is drawn (external module)");
};
return Triangle;
})();
exports.Triangle = Triangle;
Dosya: TestShape.js
//Generated by typescript 1.8.10
var circle = require("./Circle");
var triangle = require("./Triangle");
function drawAllShapes(shapeToDraw) {
shapeToDraw.draw();
}
drawAllShapes(new circle.Circle());
drawAllShapes(new triangle.Triangle());
Çıktı
Cirlce is drawn (external module)
Triangle is drawn (external module)