2016-07-06 3 views
1

В настоящее время я пытаюсь использовать TypeScript для создания файлов JavaScript, которые затем требуются в файле index.js. Я использую VS 2015 Update 3 с помощью tools.js tools 1.2 RC. К сожалению, это не работает, как я думал.Как использовать несколько скомпилированных файлов ts в модуле узла?

Для начала вот моя первоначальная идея:

У меня есть модуль узла (чтобы быть точным, это модуль http://docs.deployd.com/docs/using-modules/ deployd). Этот модуль обрабатывает поставщиков платежей, таких как 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 (function (export, require, module, __filename, __dirname) {import IPaymentProvider = require (". /IPaymentProvider.ts "); Неожиданный импорт токена ....

Мне показалось странным, что это ошибка, потому что в JavaScript нет интерфейсов. Скомпилированный файл IPaymentProvider.js пуст. Также я думал, что TypeScript в основном для разработки и скомпилированного JavaScript для производства. Итак, зачем он нужен ts-файл? Я думал, что импорт в машинописном тексте будет преобразован в требуемый компилируемый js-файл? Нужно ли мне требовать все скомпилированные js-файлы, а не только тот, который я сейчас пытаюсь использовать? (Я не знаю hink so ...)

Если честно, я считаю, что главная проблема в том, что я новичок в TypeScript и делаю что-то неправильно с самого начала.

Любая помощь/совет? Благодаря!

+0

Вам необходимо опубликовать файл декларации 'index.d.ts'. Возможно, это [статья] (https: // medium.com/@ mweststrate/how-to-create-strong-typed-npm-modules-1e1bda23a7f4) может помочь, помимо [официальной документации] (https://www.typescriptlang.org/docs/handbook/typings-for- NPM-packages.html). – Paleo

+0

Действительно ли мне нужно опубликовать файл декларации? В статье, которую вы связали, говорится об использовании модуля ввода текста внутри другого модуля. Но я хочу использовать машинописные javascript-файлы с машинописными текстами в одном модуле узла. Узел-модуль имеет файлы index.js и некоторые * .ts, которые скомпилированы в файлы * .js, и эти скомпилированные файлы требуются в файле index.js. – Hamburml

+0

Мой плохой. Я неправильно понял вашу проблему. На самом деле я не понимаю, что вы хотите сделать. – Paleo

ответ

0

У меня есть решение ... Благодаря ссылкам Paelo я смог увидеть, что мне нужно опустить файл, заканчивающийся! Поэтому действительно простым решением было написать

импорт IPaymentProvider = require ("./ IPaymentProvider");

вместо

импорта IPaymentProvider = требуется ("./ IPaymentProvider.ts");

Когда я изменил это в каждом файле ts, он работал отлично!

Смежные вопросы