Можно ли отключить пространство имён во всех файлах ts?
Добрый день, хотел бы использовать require вместо import, по некоторым причинам
Но пространство имён в typescript мешает это сделать. ( Нужно в каждом файле дописывать export default {}, чтобы пространство имён было только для этого файла, а не глобальное )
Можно как-то его просто выключить в конфиге или ещё как-нибудь решить данную проблему?
// Плюсы модуля
require("./file").init()
require("./file").Default // Зайти в объект и после использовать деструктуризацию для нужной переменной
require.main.path // Отдаёт относительный путь (его можно использовать, но опять же что это такое я везде пишу import, а тут появился require)
// Минусы экспорта
export {} // Экспорт без объекта не работает
export default init // Экспортирует в объект default
// Для того, чтобы использовать экспорт без объекта нужно переопределять export
export = init // Но чем это закончится, переопределение export, думаю ничем хорошим
// О какой архитектуре приложения может идти речь, когда идёт речь о том, что удобней и с чем удобнее работать.
// Да даже если и о архитектуре (чем меньше кода и чем он понятней, тем лучше)
require("./file").init() // Намного лучше выглядит
import file from "./file" // Чем это
file.init()
Я пришёл к тому, что лучше всего использовать Typescript с require и export ( В документации написано, что export = import = require ) - module.exports - Не создаёт отдельное пространство имён, export создаёт
Поэтому я просто решил использовать require с export - который создаст своё пространство имён
Вопрос в том, как это выглядит, это разные подходы, но их же разрешили использовать вместе в Typescript
И главное почему их разрешили, так как require видит export, но в документации конкретно такого примера нет. Но я бы всё же предпочёл module.exports с require, но придётся что-то сделать с пространством имён, вопрос, что с ним можно сделать?
const { config } = require("./file").Default
export { config }
// Опять же, я иногда позволяю себе переопределять export, для того чтобы не получать по итогу подобный объект
// Структура примерна такова при котором подобное получается
config
Default.ts
index.ts // Где индекс собирает все конфиги
{
default: {
default: {
server = {
path: require.main.path,
}
}
}
}
// Подобное решается переопределением export
export = Default
outplayedrq, import/export - это стандарт языка, require - это костыль из времен когда import/export не было
require.main - крайне сомнительная и node-специфичная фича, которая кстати не гарантирована
export {} // Экспорт без объекта не работает
здесь фигурные скобки - это не объект, это особый синтаксис
export = init // Но чем это закончится, переопределение export, думаю ничем хорошим
это транспилится в module.export = initв JS такое не возможно, в нативные модули это не компилируется, такой синтаксис не рекомендован
require("./file").init() // Намного лучше выглядит
import file from "./file" // Чем это
file.init()
нормально это делают так:
import {init} from "./file";
init();
но нужно и экспортировать нормально:export function init(): void {}
Default.ts
index.ts // Где индекс собирает все конфиги
обычно в индексе пишут реэкспорты:export * as Default from './Default';
"moduleResolution": "Node",
правильное значение - node, регистр имеет значение