@Chalovik

Как заэкстендиться от интефейса из другого .d.ts?

Всем привет)
Не так давно на работе начали переводить крупный проект на TS. У нас монорепа и все на JS, фронт, бэк и мобилка.
И соответственно есть необходимость вынести все тайпсы в корень и зависимоти в корневую node_modules, и определить глобальные типы и const enum'ы чтобы типы и интерфейсы можно было юзать глобально без import { ... } from '...'; Но чтобы этого добиться в .d.ts файлах не должно быть import'ов и export'ов иначе эти файлы будут считаться модулями и придеться везде писать import { ... } from '...'; Все типы и интерфейсы определяем через declare.
Как бы все хорошо, много типов и енумов вынес глабально, разделил по неймспейсам, все красиво. Все работает. НО когда понадобилось экстендить интерфейс из фреймворка, то тут уже возникли проблемы.
Например с Hapi.Request. В корне в node_modules/@types есть hapi.
Когда в .d.ts я пишу:
/// <reference path="../node_modules/@types/hapi/hapi.d.ts"/>

или
/// <reference types="hapi"/>

То TS все равно не позволяет исользовать интерфесы из hapi. Просто не видит. Если делать import, то мои .d.ts будут уже модулями а не заголовочными файлами и типы придеться постоянно импортить везде, чего бы хотело избежать.
Подскажите есть ли какое-то решение? Чтобы можно было экстендить интерфейсы из тайпсов фремворков без их импорта, а только как-то ссылаясь на них
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
@Chalovik Автор вопроса
Проблема решается очень и очень просто.
Можно внутри неймспейса объявить тип ссылающийся на любой другой тип из импорта:
declare namespace Requests {
  type Request = import("hapi").Request;

  interface Example extends Request {...}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы