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
, чтобы экспортированный объект из другого файла был самим классом, а не контейнером.