Спасибо @estus. Я прислушался к твоему совету и абстрагировал элементы document и jquery для класса UI only (в моем основном проекте).
Я чувствую себя комфортно с подходом, который я выбрал (хотя это может считаться хакерским). Я в основном использую module.exports внизу каждого файла и устанавливаю все в глобальную область видимости. Затем я включаю файл один раз и могу установить declare var
в любое место, где мне нужен импорт, так как я устанавливаю все для определенной глобальной области видимости, все существует после моего первого вызова. Самая приятная часть, теперь мой требуемый файл можно использовать повторно.
Вот мои обновленные файлы, которые работают как на узле, так и в браузере с использованием машинописи.
- index.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
</head>
<body>
<script type="text/javascript" src="/js/myabstractclass.js"></script>
<script type="text/javascript" src="/js/myclass.js"></script>
<script>
var myclass = new sample.myclass();
myclass.log("hello world");
</script>
</body>
</html>
- nodeserver.ts
require('./required');
declare var webapp;
declare var express;
declare var server;
declare var path;
declare var myclass;
var m = new sample.myclass();
m.log('hello world');
var port = 8081;
webapp.use('/js', express.static(__dirname));
webapp.get('/', function (req, res) {
res.sendFile(path.join(__dirname, '/index.html'));
});
server.listen(process.env.PORT || port, function () {
console.log('Listening on ' + server.address().port);
});
- myclass.ts
namespace sample {
export class myclass extends scripts.myabstractclass {
}
}
if (typeof (module) != 'undefined') {
module.exports = sample.myclass;
}
- myabstractclass.ts
namespace scripts {
export class myabstractclass {
public log(val: string): void {
console.log(val);
}
}
}
if (typeof (module) != 'undefined') {
module.exports = scripts.myabstractclass;
}
- required.ts
global.express = require('express');
global.webapp = express();
global.path = require('path');
global.server = require('http').Server(webapp);
global.scripts = {};
global.scripts.myabstractclass = require('./myabstractclass');
global.sample = {};
global.sample.myclass = require('./myclass');