Я пытаюсь понять, как правильно работать с TypeScript и классическими модулями узла JS.
Я создал очень простой проект со следующей файловой архитектурой:
.
├── index.ts
├── lodash.d.ts
├── module.ts
└── node_modules
└── lodash
lodash
был установлен с npm
. Поскольку он, похоже, не предоставляет информации о типизации, я написал базовый файл d.ts
, который описывает только одну функцию, просто чтобы угодить tsc
и избежать ошибки, связанной с незнанием lodash
.
lodash.d.ts
declare module "lodash" {
export function reverse(array: any[]): any[];
}
В моем файле module.ts
я импортирую lodash с require
и выставляю функцию в модуле, который я использую в файле index.ts
.
module.ts
/// <reference path="./lodash.d.ts" />
import _ = require('lodash');
module FooModule {
export function foo() {
return _.reverse([1, 2, 3]);
}
}
index.ts
/// <reference path="./module.ts" />
let a = FooModule.foo();
console.log(a);
Проблема в том, что tsc
(и, следовательно, VS Code) сообщает мне, что не может найти имя FooModule
.
$ tsc index.ts --module commonjs -outDir build
index.ts(3,9): error TS2304: Cannot find name 'FooModule'.
Однако, если я уберу import _ = require('lodash');
из module.ts
, он будет работать корректно (за исключением того очевидного факта, что переменная _
теперь не определена).
Я что-то не так делаю с этим require
?