2013-01-23 20 views
8

Được rồi, vì tôi có thể thấy bạn muốn sử dụng các mô-đun nội bộ trong dự án của bạn. Vâng, đã có một giải pháp thay thế trong TypeScript 0.8.1.1, bạn có thể xác định mô-đun không xuất (nội bộ) và thêm nhập khẩu ở trên nó. Trong 0.8.2 có vẻ như điều này không hoạt động nữa. Chỉ có tùy chọn tôi thấy ở đây là hoàn toàn bỏ qua cú pháp nhập khẩu và sử dụng tiêu chuẩn yêu cầu cho các mô đun nút. Tôi không biết đây có phải là một ý kiến ​​hay hay không nhưng xin hãy chia sẻ ý kiến ​​của bạn. Tôi biết rằng bằng cách sử dụng cú pháp nhập khẩu sẽ làm cho mô-đun bên ngoài (đặc tả ngôn ngữ), nhưng điều đó không đúng trong 0.8.1.1, lỗi có thể?TypeScript 0.8.2 nhập mô-đun Node.js vào mô-đun nội bộ

Trong nguyên cảo 0.8.1.1 này làm việc và không làm việc trong 0.8.2 nữa:

import path = module('path'); 
import fs = module('fs'); 
module SomeNamespace.Controller { 
    export class Index { 
     ... 
    } 
} 

tôi có thể tham khảo tập tin bao gồm cả trên mã sử dụng cú pháp tham khảo trên đầu trang của tập tin trong module nội bộ khác và thường gọi :

var ctrl = new SomeNamespace.Controller.Index; 
ctrl.index(); 

dường như trong 0.8.2 này là cách duy nhất những gì nó làm việc cho module nội bộ:

var path = require('path'); 
var fs = require('fs'); 
module SomeNamespace.Controller { 
    export class Index { 
     ... 
    } 
} 

Có khả năng nào khác để kết hợp các mô đun nội bộ với các mô-đun Node.js không? Có điều gì sai trái ở trên yêu cầu sử dụng (nó biên dịch và chạy không sao ...)?

Trả lời

4

Tôi nghĩ rằng nguyên cảo 0.8.2 đưa chúng ta gần gũi hơn với các đặc điểm kỹ thuật.

Cú pháp:

import x = module('SomeModule'); 

là đặc biệt một ExternalModuleReference trong nguyên cảo Language Specification.

Một module nội bộ sẽ được nhập khẩu sử dụng:

///<reference path="SomeModule.ts" /> 
import x = SomeModule; 

Nhưng nhập khẩu một mô-đun nội bộ sẽ không tạo bạn một tuyên bố require trong JavaScript.

Lấy từ Đặc tả ngôn ngữ TypeScript 0.8 - 9.2.2 Nhập khai báo

ImportDeclaration:

import Identifier = ModuleReference ; 

ModuleReference:

ExternalModuleReference 
ModuleName 

ExternalModuleReference:

module (StringLiteral) 
+0

Được rồi, vậy bằng cách nào đó có thể kết hợp các mô-đun nội bộ của tôi với các mô-đun commonjs của Node.js? Ngay sau khi tôi thêm nhập khẩu x = mô-đun (...) vào mô-đun nội bộ của tôi, nó sẽ được coi là một mô-đun bên ngoài. – jzvelc

+0

Chúng có thể được tạo ra bên ngoài không? Vấn đề với việc sử dụng một yêu cầu trong TypeScript là nó sẽ không cung cấp cho bạn thông tin kiểu trên biến. – Fenton

+0

Có, tôi biết, nhưng rất bất tiện khi tải các mô-đun thông qua lệnh nhập vì tôi phải cung cấp đường dẫn đầy đủ đến tệp TypeScript ... Bất kỳ giải pháp nào về vấn đề này? – jzvelc

0

Ok, lỗi này là do phiên bản của TypeScript. Trong nguyên cảo 0.8.1.1 để nhập khẩu một mô-đun bên ngoài cú pháp phải là:

export import <moduleName> = module(“<path>”); 

Đây là một lỗi được xác định trong phiên bản mới nhất của nguyên cảo, bạn có thể quay trở lại với phiên bản trước hoặc thay đổi cú pháp để làm cho nó tương thích với v0.8.1.1. Hãy nhớ rằng đây là lỗi và trong các phiên bản sau, bạn có thể sử dụng cú pháp gốc.

Đây là chủ đề chính thức cho lỗi này: http://typescript.codeplex.com/discussions/405800

+0

Một s tôi đã viết, trong 0.8.1.1 nhập khẩu làm việc tốt nhưng trong 0.8.2 toàn bộ mô-đun không có sẵn nữa trong một mô-đun nội bộ. Tôi đoán đây là hành vi chính xác (bằng cách sử dụng nhập khẩu làm cho mô-đun bên ngoài) và sẽ có mặt trong các phiên bản trong tương lai? – jzvelc

Các vấn đề liên quan