В настоящее время я пытаюсь настроить и изучить TypeScript, и у меня возникают проблемы с тем, чтобы модули работали в нормальном режиме.
Контекст
У меня есть два файла ts, main.ts
и types.ts
. main.ts
- это моя единственная точка входа, а types.ts
- это просто тестовый файл с парой интерфейсов. У меня также есть файл tsconfig.json
, который определяет, помимо прочего, цель (ES6), модуль (AMD) и outFile.
Моя цель - иметь возможность выгрузить весь мой проект в один JavaScript файл вместо необходимости добавлять целую кучу тегов сценария в мой html.
// types.ts
export interface Time {
unix: number;
}
// main.ts
import {Time} from "types";
document.addEventListener("DOMContentLoaded", () => {
let x: Time = { unix: 12345 };
alert(x.unix);
});
<!-- index.html -->
<!DOCTYPE html>
<head>
<link rel="stylesheet" href="static/styles/styles.css" />
<script data-main="static/scripts/timeapp" src="static/scripts/require.js" async></script>
</head>
<body>
<header></header>
<main></main>
<footer></footer>
</body>
Проблема
Когда tsc
компилирует мой проект в один файл, потому что мой main.ts
файл имеет импорт (потому что, конечно, он это делает), он также классифицируется как модуль. Это, очевидно, заставляет require.js
ничего не делать. Ни один из моего кода не выполняется. Нет ошибок, нет вывода, вообще ничего. Оба моих файла оказались в блоках define
, и я действительно не знаю, что делать.
define("types", ["require", "exports"], function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
});
define("main", ["require", "exports"], function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
document.addEventListener("DOMContentLoaded", () => {
let x = {
unix: 12345
};
alert(x.unix);
});
});
//# sourceMappingURL=time.js.map
Я считаю довольно неразумным, что при импорте верхнего уровня файл классифицируется как модуль. Экспорт конечно, но импорт сам по себе, что не имеет смысла для меня. Может быть, кто-то может уточнить это тоже?