TS4023: Экспортированная переменная имеет или использует имя internal.Transform из внешнего модуля stream, но не может быть названа

Я вижу эту загадочную ошибку TypeScript:

TS4023: Экспортированная переменная имеет или использует имя «internal.Transform» из внешнего модуля «stream», но не может быть названа.

Кто-нибудь знает, что это на самом деле означает?

Я вижу эту проблему на Github, пытаюсь ее расшифровать: https://github.com/Microsoft/TypeScript/issues/5711

введите здесь описание изображения


person Alexander Mills    schedule 30.07.2017    source источник


Ответы (1)


Что здесь происходит?

Typescript не может явно назвать тип getTapJSONParser или чего-либо, что этот метод предоставляет внешнему миру. Для этого есть две причины: либо вы не включаете определение для internal.Transform, либо это определение заменяется локальным определением. В вашем примере, скорее всего, первая из двух возможностей вызывает у вас проблемы.

Теперь в сообщении об ошибке похоже, что машинописный текст правильно определил тип, почему он все еще выдает сообщение об ошибке? Для экспорта чего-либо typecipt должен иметь возможность напрямую ссылаться на тип. Он в основном знает, какой тип он хочет использовать, но просто не может ссылаться на него, поскольку не добавляет никаких дополнительных операторов импорта. Это означает, что если добавление определения типа добавляет тип, который не импортируется, именование не выполняется, вызывая это сообщение об ошибке. Более простой способ подумать об этом: если вы добавите определение типа вручную к экспортируемому материалу, вызовет ли это ошибку, потому что вы явно не импортировали определения типа, которые вы использовали? Если да, вам нужно добавить этот импорт, даже если вы хотите, чтобы машинописный текст определял тип.

Как это исправить?

Во-первых, убедитесь, что у вас нет типа, который internal.Transform затеняет. Если это не так, import { Transform } from "stream"; (или просто импортируйте все, что экспортирует поток, может быть проще, если вы используете больше, чем просто Transform).

person Daniel Klischies    schedule 31.07.2017