2014-01-27 94 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