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

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

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

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

21 ответов

66 просмотров

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-компонентов или апи?

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта