Что касается самой ошибки, let
используется для объявления локальных переменных, которые существуют в областях видимости блока, а не в областях видимости функций. Он также более строгий var
, поэтому вы не можете делать такие вещи, как:
if (condition) {
let a = 1;
...
let a = 2;
}
Также обратите внимание, что case
предложения внутри switch
блоков не создают свои собственные области действия блока, поэтому вы не можете повторно объявить одну и ту же локальную переменную для нескольких case
s, не используя {}
для создания каждого блока.
Что касается импорта, вы, вероятно, получаете эту ошибку, потому что 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;
}