Привет,
Можно ли написать внешний (commonjs) модуль «A», а затем в коде другого модуля «B» объявить переменную как модуль typeof «A» без использования импорта, который в конечном итоге требует модуля «A».
Причина, по которой я хочу это сделать, заключается в том, что я буду передавать ссылку на модуль «A» конструктору класса в другом модуле «B», потому что я хочу, чтобы модуль «A» был одноэлементным. Но я хочу ввести аргумент в конструкторе для аргумента модуля «A», как если бы модуль «A» был импортирован с использованием import A = require («A»);
Причина, по которой мне нужен одноэлементный модуль, заключается в том, что этот модуль может содержать экземпляры классов, которые управляют подключениями к базе данных и т. Д., И я действительно не хочу, чтобы они повторно инициализировались каждый раз, когда мне нужно импортировать; Я хочу иметь возможность передавать их, а не полагаться на потенциальную магию "кеширования узлов и модулей".
Есть ли способ сделать это? Я думал о других способах достижения желаемого, но это кажется самым простым, если это возможно.
Импорт модулей отменяется, если они не используются в позиции значения. поэтому, если ваш импорт модуля A
используется только в позиции типа, вызов require
не будет записан.
например:
// B.ts
import s = require("./A");
var x: typeof s;
испускает
var x;
Отвечает ли это на ваш вопрос?
О, это здорово! Это однозначно отвечает на мой вопрос. Я не смог найти этого в документации, поэтому большое спасибо за вашу помощь. :)
Привет народ,
У меня вопрос в том же духе. Я пробовал вышеуказанное решение, но теперь оно сработало для меня.
Я импортирую классы из родительского модуля webpack import {A, B} from «parent»;
Я просто хочу вызвать конструктор для этих классов. Я пробовал const a = A ({data: 1}); Это не дает никаких ошибок TS при компиляции. Но он ломается во время выполнения javascript, говоря, что ошибка типа A не является конструктором.
Нужно ли мне создавать собственные типы и добавлять их в devDependancies? Или есть особый способ экспортировать мой «родительский» модуль, например экспорт по умолчанию.
Любая помощь приветствуется.
Ваше здоровье,
Sudeep
Самый полезный комментарий
Импорт модулей отменяется, если они не используются в позиции значения. поэтому, если ваш импорт модуля
A
используется только в позиции типа, вызовrequire
не будет записан.например:
испускает
Отвечает ли это на ваш вопрос?