2014-01-27 95 views
0

我安裝了Node.js工具(https://nodejstools.codeplex.com/),我有一個項目可以在本地正常運行的文件上運行。對於Web應用程序,我想使用TypeScript(稍後我可能會將我的node.js代碼以某種方式遷移到TS)。只需在我的其他項目中調用一個函數即可。在VS2012的TypeScript項目中使用JavaScript項目

這是我用來調用我的函數(compiler.compile)

var compiler = require("../src/compiler"), 
    fs  = require("fs"); 


fs.readFile(process.argv[2], 'utf8', function(err, data) { 
    if (err) { 
     console.log("FILE READ ERROR: ", err); 
     process.exit(); 
    } 

    var output = compiler.compile(data); 
}); 

的可執行文件,這是我的導出:

exports.compile = function(code) { 
    //code 
}; 

我怎麼會去使用我的編譯( )在VS2012 TS項目中的功能?

我想:

<script src ="compiler.js"></script> 
<script src="app.js"></script> 

和:

declare function compile(code:String); 

但是,這似乎並沒有工作。

編輯:我也試着這樣做:

compiler.js

exports.compile = function() {}; 

compiler.d.ts

declare module "compiler.js" { 
     class Compiler { 
      compile(); 
     } 
    } 

app.ts

///<reference path="./compiler.d.ts"/> 
import compiler = module("compiler.js"); 

但是我在app.ts中的「import compiler = module」下得到了一個squigly行,「模塊不能被別名爲非模塊類型。 。無法解析模塊參考「模塊」」

所有3個文件是在同一文件夾和項目進行測試

EDIT2:我設法得到它認識到在compiler.d.ts模塊,即使通過使用'require'而不是'module'移動到我的JS項目中,但它似乎並沒有鏈接到我的編譯器.js文件中的函數。實際上,我沒有看到任何將JS函數鏈接到d.ts聲明在任何地方,這是相當混亂。

回答

0

我可能不完全理解你的問題,但我相信你需要...

compiler.d.ts

declare var compile: (code: string) => any; 

export = compile; 

app.ts

import compile = require('./compiler'); 

compile('Code In Here'); 

你應該離開了文件的擴展名在import語句。最新版本的TypeScript使用require而不是module(正如您發現的那樣)。如果函數只是使用compile(str)調用,則聲明不需要以任何方式包裝函數。如果你確實希望它包含在模塊和類中,只要記住模塊是文件,所以你需要模塊聲明(如下面的代碼compiler.d.ts所示)。

import Compiler = require('/compiler'); 

var compiler = Compiler.CompilerClass(); 

compiler.compile('Code here'); 
+0

這並沒有爲我工作:

declare class CompilerClass { compile(code: string): any; } 

這將可用於如下。它建立並運行,但沒有任何反應。我離開VS最初的項目代碼(在頁面上寫東西)和你的app.ts,但它永遠不會到達寫作部分。 – Mosho

+0

我也無法調試。我把所有的JS文件放在TS項目中,雖然我可以使用VS的nodejs工具調試JS,但我在TS項目的JS文件中添加的任何斷點都會被忽略。這應該可能會出現在它自己的問題中...... – Mosho