2012-10-18 32 views
20

Cách thực hành tốt nhất để nhập mô-đun trong các nút có bản ghi là gì? Tôi đến từ C# nền vì vậy tôi muốn làm một cái gì đó như thế nàyNhập mô-đun TypeScript trong nútjs

MyClass.ts

module MyNamespace { 
    export class MyClass { 
    } 
} 

app.ts

// something like using MyNamespace 
new MyNamespace.MyClass(); 

hoặc

MyClass.ts

export class MyClass { 
} 

app.ts

import MyClass = module("MyClass") 
new MyClass(); 

Tôi biết tôi có thể làm điều này và nó sẽ làm việc, nhưng sau đó tôi phải suy nghĩ lên cho hai tên cho mỗi lớp

import MyClass2 = module("MyClass") 
new MyClass2.MyClass(); 

Point là tách các lớp thành nhiều tệp .ts (tốt nhất là một tệp cho mỗi lớp). Vì vậy, câu hỏi là, làm thế nào là điều này được thực hiện?

Trả lời

15

Bạn có hai lựa chọn ở đây:

Nếu bạn nhấn mạnh vào việc sử dụng CommonJS hoặc mô-đun bộ xử lý AMD, sau đó bạn sẽ phải sử dụng bên ngoài module chỉ là cách bạn mô tả nó trong câu hỏi của bạn. Cho dù bạn có sử dụng một mô-đun để khai báo vùng tên của chính bạn hay không thì hầu hết là vấn đề về hương vị. Cách duy nhất để phá vỡ các vấn đề xác định hai tên là tạo ra một biến mà bí danh kiểu:

mymodule.ts

export module MyNamespace { 
    export class MyClass { 
    } 
} 

app.ts

import ns = require('mymodule'); 
var myclass = new ns.MyNamespace.MyClass(); 
var myclassalias = ns.MyNamespace.MyClass; 
var myclass2 = new myclassalias(); 

của bạn tùy chọn khác là sử dụng các mô-đun nội bộ được sử dụng chủ yếu để cấu trúc mã của bạn trong nội bộ. Mô-đun nội bộ được đưa vào phạm vi tại thời gian biên dịch bằng cách sử dụng các đường dẫn tham chiếu .

mymodule.ts

module MyNamespace { 
    export class MyClass { 
    } 
} 

app.ts

///<reference path='mymodule.ts'/> 
var myclass = new MyNamespace.MyClass(); 

Tôi nghĩ rằng bạn sẽ phải quyết định cho chính mình mà những hai cách tiếp cận thích hợp hơn.

+1

Cách tiếp cận thứ hai có vẻ tốt. Nhưng hiện tại tôi đang sử dụng visual studio và nodejs, làm thế nào tôi nên đi về cách tiếp cận thứ hai trong trường hợp này, tôi có phải hợp nhất tất cả các tập tin (bởi một số công cụ riêng biệt) vào một .js? Và trong trường hợp trình duyệt tôi nên thêm mọi thẻ .js vào

2

Bạn có thể nhập mô-đun TypeScript vào tệp node.js bằng mô-đun typescript-require, được tạo cho mục đích cụ thể này.

0

tôi muốn giới thiệu với sử dụng module (hoặc namespace) từ khóa rõ ràng, đó là một tàn dư thuộc về tàn tích của một thời gian trước đó. * Bạn thường không cần đến chúng bởi vì bất kỳ tập tin typescript với cấp cao nhất import hoặc export là tự động một mô-đun. Ví dụ myModule.ts thứ hai của bạn tốt.

export class MyClass { 
    ... 
} 

Nhưng khi bạn nhập nó vào một mô-đun nguyên cảo, bạn sẽ muốn sử dụng một cái gì đó như thế này:

import { MyClass } from './myModule'; 
var myInstance = new MyClass(); 

Cá nhân, tôi không thích repetitiveness của dòng 1, nhưng nó là những gì ngôn ngữ kêu gọi, vì vậy tôi đã học cách chấp nhận nó. Tôi nghĩ rằng các tiện ích của cú pháp này là không rõ ràng, trừ khi bạn từ bỏ mô hình tập tin mỗi lớp. Bạn chọn và chọn tên để nhập từ mô-đun, để không xảy ra ô nhiễm không gian tên ngoài ý muốn.

Cú pháp nhập thay thế kéo vào tất cả các tên từ mô-đun, nhưng bạn phải đủ điều kiện tên với mô đun khi bạn sử dụng chúng. Vì vậy nó cũng là tên va chạm kháng.

import * as myModule from './myModule'; 
var myInstance = new myModule.MyClass(); 

Có ngoại lệ đối với nguyên tắc chung về việc không cần module/namespace từ khóa, nhưng không bắt đầu bằng cách tập trung vào chúng. Hãy suy nghĩ tệp == mô-đun.