Typescript: Объявить переменную как тип внешнего модуля без импорта

Созданный на 8 сент. 2015  ·  3Комментарии  ·  Источник: microsoft/TypeScript

Привет,

Можно ли написать внешний (commonjs) модуль «A», а затем в коде другого модуля «B» объявить переменную как модуль typeof «A» без использования импорта, который в конечном итоге требует модуля «A».

Причина, по которой я хочу это сделать, заключается в том, что я буду передавать ссылку на модуль «A» конструктору класса в другом модуле «B», потому что я хочу, чтобы модуль «A» был одноэлементным. Но я хочу ввести аргумент в конструкторе для аргумента модуля «A», как если бы модуль «A» был импортирован с использованием import A = require («A»);

Причина, по которой мне нужен одноэлементный модуль, заключается в том, что этот модуль может содержать экземпляры классов, которые управляют подключениями к базе данных и т. Д., И я действительно не хочу, чтобы они повторно инициализировались каждый раз, когда мне нужно импортировать; Я хочу иметь возможность передавать их, а не полагаться на потенциальную магию "кеширования узлов и модулей".

Есть ли способ сделать это? Я думал о других способах достижения желаемого, но это кажется самым простым, если это возможно.

Question

Самый полезный комментарий

Импорт модулей отменяется, если они не используются в позиции значения. поэтому, если ваш импорт модуля A используется только в позиции типа, вызов require не будет записан.

например:

// B.ts
import s = require("./A");
var x: typeof s;

испускает

var x;

Отвечает ли это на ваш вопрос?

Все 3 Комментарий

Импорт модулей отменяется, если они не используются в позиции значения. поэтому, если ваш импорт модуля 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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

Antony-Jones picture Antony-Jones  ·  3Комментарии

uber5001 picture uber5001  ·  3Комментарии

weswigham picture weswigham  ·  3Комментарии

bgrieder picture bgrieder  ·  3Комментарии

kyasbal-1994 picture kyasbal-1994  ·  3Комментарии