2013-04-25 39 views
5

Nếu tôi có điều này ts mô-đun:nguyên cảo AMD thực hiện xấu với Javascript/RequireJS

export function say(){ 
    console.log("said"); 
} 

và tôi biên dịch nó với các tùy chọn amd tôi có thể sử dụng nó khá dễ dàng từ một khách hàng ts:

import foo = module("tsmodule") 
foo.say(); 

export var x = 123; 

Tuy nhiên nếu tôi có javascript tương đương với các mô-đun ts:

define(["require", "exports"], function(require, exports) { 
    function say() { 
     console.log("said"); 
    } 
    exports.say = say; 
}) 

không có cách nào để sử dụng nó một cách dễ dàng. Giải pháp đơn giản nhất có thể:

// of course you can use .d.ts for requirejs but that is beside the point 
declare var require:any; 

// will fail with error module has not been loaded yet for context 
// http://requirejs.org/docs/errors.html#notloaded 
var useme = require("jsmodule") 
useme.say(); 

export var x = 123; 
import foo = module("tsmodule") 
foo.say(); 

không thành công do lỗi http://requirejs.org/docs/errors.html#notloaded. Vì "jsmodule" không được chuyển đến cuộc gọi xác định trong bản ghi đã tạo.

Hai cách giải quyết Tôi có

  • không sử dụng nhập khẩu/xuất khẩu (tính năng ngôn ngữ bị mất)
  • sử dụng yêu cầu ([]) (vẫn có thể không xuất khẩu một cái gì đó mà phụ thuộc vào yêu cầu ([ ]) gọi)

có giới hạn: https://github.com/basarat/typescript-requirejs. Có cách nào khác không? Nếu không bạn có thể bỏ phiếu ở đây: https://typescript.codeplex.com/workitem/948 :)

Trả lời

3

Nếu bạn muốn tải trong một module JavaScript bạn luôn có thể sử dụng (nặng tài liệu) amd-dependency tag:

/// <amd-dependency path="jsmodule" /> 

Điều này sẽ đặt jsmodule trong mảng phụ thuộc của cuộc gọi xác định của bạn.

Và sau đó cung cấp một tập tin khai trong đó bạn chỉ cần nêu

module useme { 
    function say(): void; 
} 
+1

rõ ràng một tính năng không có giấy tờ, và không làm việc với phiên bản tsc của tôi 0.9.0 alpha. Hãy để tôi gỡ cài đặt/cài đặt phiên bản 0.8 – basarat

+0

Aww shoot, họ đã xóa mục này trong 0.9 ?! Tôi đang sử dụng 0.8.1.1. – thomaux

+2

Hoạt động ở 0.8.3. Nhưng không phải trong 0.9.0alpha – basarat

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