如何在节点模块中使用多个已编译的ts文件?

时间:2016-07-06 13:41:43

标签: node.js typescript

目前我正在尝试使用TypeScript创建一个index.js文件中所需的JavaScript文件。我正在使用带有node.js工具1.2 RC的VS 2015 Update 3。可悲的是,它没有像我想象的那样工作。

首先,我最初的想法是:

我有一个节点模块(确切地说,它是一个deployd模块http://docs.deployd.com/docs/using-modules/)。此模块正在处理paypal或stripe等支付提供商。现在我想使用TypeScript编写接口,类和使用类型,以便更容易添加新的支付提供程序。旧的.js文件应该仍然存在并使用。我想逐步迁移并一起使用自编和编译的.js文件。所以我想我可以创建.ts文件,编写我的代码,保存,让VS编译成js并在另一个js文件中要求编译的js文件。好的,这是我的想法......现在问题

我有一个看起来像这样的PaymentProvider.ts文件

import IPaymentProvider = require("./IPaymentProvider.ts"); // Interface, can't be realized in JavaScript, just TypeScript

export abstract class PaymentProvider implements IPaymentProvider.IPaymentProvider
{

    providerName: string;
    productInternalId: number;

    constructor(providerName : string)
    {
        this.providerName = providerName;
    }

    //... some methods

};

另一个文件是PaypalPaymentProvider.ts

import PaymentProvider = require("./PaymentProvider.ts");
export class PaypalPaymentProvider extends PaymentProvider.PaymentProvider
{

    constructor()
    {
        super("paypal");
    }
    // more methods
}

VS 2015没有显示任何错误。生成js和.js.map文件。现在我以为我可以要求文件,就是这样。我试图使用PaypalPaymentProvider.js像这样 const PaypalPaymentProvider = require(“./ lib / payment-provider / PaypalPaymentProvider.js”); (是的,它位于那里)但它不起作用。通过节点启动index.js时出现以下错误:

... \ Path \ PaymentProvider.ts:1(函数(exports,require,module,__ filename,__ dirname){import IPaymentProvider = require(“./ IPaymentProvider.ts”);意外的令牌导入.... < / p>

我觉得奇怪的是这是错误,因为JavaScript没有接口。已编译的IPaymentProvider.js为空。 另外我认为TypeScript主要用于开发和编译的JavaScript用于生产。那么为什么需要一个ts文件呢?我以为打字稿中的导入会转换成需要编译的js文件吗? 我是否需要要求所有已编译的js文件,而不仅仅是我目前尝试使用的文件? (我不这么认为......)

老实说,我认为主要的问题是我是TypeScript的新手并且从一开始就犯了错误。

任何帮助/建议?谢谢!

1 个答案:

答案 0 :(得分:0)

我有解决方案......感谢Paelo的链接,我能够看到我需要省略文件结尾!所以真正简单的解决方案是编写

导入IPaymentProvider = require(&#34; ./ IPaymentProvider&#34;);

而不是

导入IPaymentProvider = require(&#34; ./ IPaymentProvider.ts&#34;);

当我在每个ts文件中更改它时,它工作得很好!