Что касается самой ошибки, letиспользуется для объявления локальных переменных, которые существуют в областях видимости блока, а не в областях видимости функций. Он также более строгий var, поэтому вы не можете делать такие вещи, как:
if (condition) {
let a = 1;
...
let a = 2;
}
Также обратите внимание, что caseпредложения внутри switchблоков не создают свои собственные области действия блока, поэтому вы не можете повторно объявить одну и ту же локальную переменную для нескольких cases, не используя {}для создания каждого блока.
Что касается импорта, вы, вероятно, получаете эту ошибку, потому что TypeScript не распознает ваши файлы как фактические модули, и, казалось бы, определения уровня модели в конечном итоге становятся для него глобальными определениями.
Попробуйте импортировать внешний модуль стандартным способом ES6 , который не содержит явного назначения и должен заставить TypeScript правильно распознавать ваши файлы как модули:
import * as co from "./co"
Это все равно приведет к ошибке компиляции, если у вас уже есть что-то названное co, как и ожидалось. Например, это будет ошибка:
import * as co from "./co";
let co = 1;
Если вы получаете сообщение об ошибке «не могу найти модуль co» ...
TypeScript выполняет полную проверку типов модулей, поэтому, если у вас нет определений TS для модуля, который вы пытаетесь импортировать (например, потому что это модуль JS без файлов определений), вы можете объявить свой модуль в .d.tsфайле определения, который не не содержат экспорт на уровне модуля:
declare module "co" {
declare var co: any;
export = co;
}