169 похожих чатов

Кто может мне рассказать, как корректно расширять/переопределять типы third-party кода?

всю доку излазил, примера не нашёл, на duplicate identifier смотреть устал

синтетический пример кода здесь

21 ответов

17 просмотров

export type FCLel = …

https://www.typescriptlang.org/docs/handbook/declaration-merging.html

Ivan-🧑‍🚀 Автор вопроса

но снаружи-то я хоу использовать его как FC

Мы сейчас используем patch (не идеальный вариант)

Ivan-🧑‍🚀 Автор вопроса

подробнее, пжлста

(Я это имел ввиду, ссылкой ошибся)

Ivan-🧑‍🚀 Автор вопроса

я понимаю

yarn patch можно свои патчи на пакеты писать

Но в твоем варианте я бы просто объявил бы свой тип и его использовал в проекте, почему так не хочешь?

Ivan-🧑‍🚀 Автор вопроса

https://t.me/ts_cool/133953

Ivan-🧑‍🚀 Автор вопроса

Не знаю, что за ярн такой, не мой вариант

Тогда компонент обертка как предложили выше (это самый надежный вариант когда используется что то внешнее) ну или форк либы

можно patch-package взять, если без патчей никак не получится.

Ivan-🧑‍🚀 Автор вопроса

то есть нет никакого способа пропатчить типы внешней зависимости? прям никак?

Да что то я не знаю способов, я думал declare module будет нормально работать. Но видимо не просто так у нас в команде перешли на patch

TS в соответствии с принципом открытости/закрытости позволяет либо расширять модули новыми типами, либо полностью заменять их, но не модифицировать (тут можно посмотреть подробнее: https://t.me/ts_cool/124834). Модуль react экспортирует свои основные типы в виде огромного неймспейса, а в TS нет синтаксических средств для вырезания какого-либо значения из неймспейса, или для копирования в один неймспейс части другого неймспейса без явного перечисления всех копируемых элементов, поэтому удобных способов именно переопределить типы react нет. Но можно использовать три половинчатых подхода: 1) Ничего не переопределять во внешнем модуле, а только расширить его новыми типами. Архитектурно это самый правильный способ (самый явный для читающих код), так что TS поддерживает его нативно, и он проще всего в реализации. 2) Если нужно именно переопределить тип внешнего модуля, можно с помощью параметра paths в tsconfig.ts перенаправить TS на свою реализацию типов react (на рантайм это не повлияет), однако в этой реализации придётся вручную указать все типы из оригинального модуля react, которые понадобятся в проекте. 3) Технически переопределить тип модуля react можно и без paths (вынести оригинальные типы react в глобальную область видимости, и использовать их в скрипте со своим определением модуля react), но при таком способе придётся указывать все используемые типы react уже в двух местах.

Крутой ответ 👍

Ivan-🧑‍🚀 Автор вопроса

херасе это круто, спасибо тебе

Такие файлы деклараций пишутся вручную или генерируются https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/react/index.d.ts#L65?

Этот вручную пишется

а где почитать как генерируются файлы декларации для библиотеки на ts? или лучше вручную писать, например, библиотеки view-компонентов или апи?

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
48
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
Ребята, а из API геокодеров (по адресам в РФ) что сейчас актуального и есть ли среди актуального бесплатное/с нормаотным лимитом запросов? ситуация простая - на сайте периоди...
Dreamer_0x01 VeseloV
8
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
Есть тут те у кого дети есть + 2 работы + в зал ходят + в семейной жизни все хорошо?
Abdul-Aziz M.
13
кто шарит: mattermost отслеживает что ты на пк запускаешь?
Valentin
13
Карта сайта