Typescript не может найти имя, даже если оно ссылается

У меня есть проект angular, который я пишу в typescript. Это хорошо работало для меня под VS, и теперь я пытаюсь сделать то же самое с Node.JS под webstorm.

У меня есть класс progressor, в файле progressor.ts:

export class Progressor{
    public tasks: any;

    constructor(){
        this.tasks = {};
    }
    ...
}

и у меня есть мой главный контроллер, который использует этот класс:

/// <reference path="../progressor.ts" />

declare var angular: any; // I'm trying to eliminate these...
declare var Papa: any;
declare var $: any;

class MainController{
    constructor($scope: any){
        $scope.progressor = null;
        $scope.filesDropped = function(files, rejectedFiles){
            if(!files || !files.length)
                return;

            $scope.progressor = new Progressor();
            // ...
        }
    };
}

Обратите внимание, что это не Node.JS-код - это просто часть проекта Node.JS.

Относительный путь ссылки правильный. Когда я пытаюсь скомпилировать его, используя:

tsc mainController.ts --module amd --target es5

Я получаю сообщение об ошибке: Не могу найти имя Progressor.

Я не понимаю, в чем проблема... У меня уже не было проблем с моим проектом Node.JS, и я рассматриваю возможность отказаться от TS вообще для этого проекта. Прежде всего - может ли кто-нибудь сказать мне, почему он не будет компилироваться? Обратите внимание, что я хочу, чтобы каждый файл TS был скомпилирован отдельно, поэтому я могу легко отлаживать их через Chrome.

Ответы

Ответ 1

Через некоторое время больше поиска я наткнулся на это: TypeScript Модули. Проконсультировавшись с этим, я попытался разместить оба моих класса внутри блоков {} блоков, что решило проблему. Я все еще немного смущен, почему язык потребует от меня использования модулей для многопользовательского использования... но пока это будет сделано.

Ответ 2

Если у вас есть export что-то, вам нужно import его, чтобы использовать его, а не <reference ....

Замените комментарий <reference на import prog = require('./progressor');, затем вы можете использовать, например. new prog.Progressor().

Вы можете использовать export = Progressor, чтобы экспортированный объект из другого файла был самим классом, а не контейнером.