Ответы пользователя по тегу TypeScript
  • Как удалить одного подписчика, если одинаковые имена?

    Robur
    @Robur
    Знаю больше чем это необходимо
    очевидно что для этого вам надо использовать что-то иное, чем имя.
    либо это ссылка на хендлер, тогда код будет вида emiter.off(event, handler)
    либо, как это делается много где, emiter.on() возвращает функцию - отписывалку, тогда будет
    const off1 = emiter.on('aaa', handler1)
    const off2 = emiter.on('aaa', handler2)
    off1()


    Например, как это сделано в Vue.
    В нем есть on и off

    в нем - первый вариант:
    https://github.com/vuejs/vue/blob/dev/src/core/ins...
    Ответ написан
    Комментировать
  • Как работать с React Bootsrap and Typescript?

    Robur
    @Robur
    Знаю больше чем это необходимо
    "export type" это новая фича в тайпскрипте, поддерживается по моему с 4-й версии, обновите тайпскрипт
    Ответ написан
    Комментировать
  • Реален ли такой дженерик в TypeScript?

    Robur
    @Robur
    Знаю больше чем это необходимо
    function wrapper<A extends any[], T extends { start(...args: A): void }>(target: { new(): T }, ...args: A): T {
      let instance = new target();
      instance.start(...args);
      return instance;
    }
    
    
    class RandomClass {
      start(arg1: string, arg2: number) { /* ... */ }
    }
    let instance = wrapper(RandomClass, 'Hello, world!', 777); /// все ок
    let instance2 = wrapper(RandomClass, 777); /// ошибка


    ошибка правда немного странная ругаться будет на RandomClass а не аргументы, возможно можно заставить ругаться на агрументы, не уверен.
    Ответ написан
    Комментировать
  • Компилятор nodejs приложений?

    Robur
    @Robur
    Знаю больше чем это необходимо
    babel это и есть "компилятор" для js. с плагинами и прочим. Не уверены - почитайте документацию чтобы понять это то что вам надо или нет. Можно еще всякие бандлеры взять. webpack, rollup.
    Ну или конкретно напишите что за "компилятор" такой вам нужен, что и во что он должен компилировать.
    Ответ написан
    Комментировать
  • Передача параметров из глобального state в локальный и обратно?

    Robur
    @Robur
    Знаю больше чем это необходимо
    не надо одно и то же хранить в разных местах и "прокидывать стейт из Parent в Child"

    поднимайте стейтв родителя и передавайте нужные значение в пропсах, в дочерних компонентах используйте напрямую из props. Если надо изменить - из дочернего дергайте обработчик, и пусть родитель меняет то что надо поменять и передает новые пропсы.

    ну или как уже сказали - контекст, если этот стейт нужен много где .
    Ответ написан
    Комментировать
  • Что стоит использовать type или интерфейс?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Что стоит использовать type или интерфейс?

    Что хотите

    лучше всегда использовать типы, а не интерфейсы, чтобы код выглядел более единообразно

    Если повальное использование типов приведет к более однообразному коду - то да.
    А в другом проекте может так получиться что использование интерфейсов приведет к более однообразному коду.

    В любом случае - однообразие - это хорошо. Что вас к нему приближает, так и пишите.
    Ответ написан
    2 комментария
  • Можно ли учить TypeScript, не зная JavaScript(для бекенда)?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Можно, вам же никто не запретит.
    Но или из вас получится что-то на уровне jquery - программиста, или, если вы серьезно будете изучать TS, то по ходу все равно будете так же изучать и JS, хотите вы этого или нет.
    С другой стороны - изучать все-все странности и выкидоны JS типа приведения типов не обязательно, TS для того и сделан чтобы они в вашем коде не появлялись большую часть времени.
    Ответ написан
    Комментировать
  • Как сделать Hook, для работы с query parameters?

    Robur
    @Robur
    Знаю больше чем это необходимо
    1. не понятен вопрос, какие эффекты, при вем тут useEffect? не хватает кода как вы это все используете и что за проблемы.
    2. updateUrl должна сохранять все параметры которые уже были в урл, и добавлять/обновлять новые. У вас все удаляется и ставятся только переданные.
    3. Золотой стандарт - использовать роутинг. Если не хотите или не подходит - то любой велосипед, ваш тоже подойдет.

    4. Вы точно хотите именно url? может вам localStorage больше подойдет?
    Ответ написан
  • Нужно ли писать тесты(Jest/Enzyme) в React приложении которое написано на TypeScript?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Там ведь итак всё строго типизированно... есть ли в этом смысл?


    найдите ошибку логики и ошибку типов:
    //returnы number increased by one
    function addOne(a: number) {
     return a-1
    }
    Ответ написан
    Комментировать
  • Зачем в имени функции используются угловые скобки?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Функция identity принимает число и возвращает число.

    нет, она принимает любой тип и возвращает этот же тип

    аким образом, если в программе есть следующий вызов функции identity('qwerty') ,то ошибку программист заметит на этапе компиляции, а не во время выполнения.


    В этом вызове нет никаких ошибок, все нормально - принимает строку и возвращает строку.

    ,то программист заметил бы ошибку только на этапе выполнения.

    не заметил бы, потому что там ошибки нет.

    ошибка будет если вы напишите
    const x: number = identity('aaa')
    //или 
    const x: string = identity(1)
    // или любой другой вариант где типы не совпадут.


    написать identity<number>(1) можно но смысла нет, это совершенно то же самое что и identity(1)

    Прочитайте что такое Generics, чтобы иметь понимание "зачем нужны эти скобки" в целом.
    Ответ написан
    Комментировать
  • Как типизировать приложение?

    Robur
    @Robur
    Знаю больше чем это необходимо
    ts ругаеться и таких моментов море, где я пишу код не совсем как я хочу, а как меня заставляет ts


    99% что у вас какой-то косяк и возможные проблемы (даже если вы запускаете и "оно работает").

    Но вот внутри функции есть еще скажем такая промежуточная типизация(NodeListOf) с которой я не совсем согласен

    вы можете быть сколько угодно согласны или нет, реальные данные от этого не поменяются. И тут или типы совпадают - и тогда тайпскрипт вам помогает в разработке, или нет - и тогда у вас проблемы.
    конкретно в этой строке никакой тип ставить не надо - тайпскрипт и так знает что у вас там. пишите просто const allLinksOnPage = document.querySelectorAll('img')

    Как вы считаете стоит ли типизировать вообще все?

    да, кроме мест где типы крайне сложно написать а профита от этого мало.
    Ответ написан
    Комментировать
  • Почему текстура не применяется к модельке?

    Robur
    @Robur
    Знаю больше чем это необходимо
    чтобы не писать @ts-ignore, надо чтобы были правильные типы. Если их никто не написал за вас - значит это нужно сделать самостоятельно.
    Ответ написан
  • Типизация мапы соответствий в react typescript?

    Robur
    @Robur
    Знаю больше чем это необходимо
    type X = {[k in TypeText]: () => {}}

    Я бы подставил ваши типы, но они плохо копируются из картинки, а набирать их руками мне лень
    Ответ написан
    1 комментарий
  • Как расширить mocha context в typescript?

    Robur
    @Robur
    Знаю больше чем это необходимо
    проще всего типизировать this в обработчиках
    it( 'my test', function (this: MyContext) {})
    Ответ написан
  • Как правильно описать в ts event инпута?

    Robur
    @Robur
    Знаю больше чем это необходимо
    сходите в описание onKeyUp и посмотрите сигнатуру метода.
    там же будет и тип ивента, который можете у себя использовать
    Ответ написан
    Комментировать
  • Как в TypeScript задекларировать функцию библиотеки на JS?

    Robur
    @Robur
    Знаю больше чем это необходимо
    как то так:
    user(): User
    
    ...
    
    interface User {
       get(options: GetOptions): Promise<Something>
       add(options: AddOptions): Promise<SomethingElse>
    }

    Ну и так далее
    Ответ написан
    Комментировать
  • Как открыть модуль typescript с экспортом в global scope?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Ничего не понял, но
    - "экспортировать" что-то в глобальную область видимости - плохая практика, надо вескую причину чтобы это делать
    - пишите по простому - без 'module'
    - настройте вебпак так чтобы он компилировал и собирал вам ts файлы. компилировать их отдельно и собирать отдельно не надо. как это сделать описано тут https://github.com/TypeStrong/ts-loader
    Ответ написан
  • Почему функция не импортируется?

    Robur
    @Robur
    Знаю больше чем это необходимо
    пишите как все:
    export default createScene
    и
    import createScene from './modules/scene'

    или
    export createScene
    и
    import {createScene} from './modules/scene'

    export default { createScene }
    можете писать тогда когда сможете рассказать зачем вам это надо и будете знать как это правильно импортировать
    Ответ написан
    Комментировать
  • Как экспортировать из замыкания в TypeScript?

    Robur
    @Robur
    Знаю больше чем это необходимо
    никак.
    пишите как в первом варианте и забудьте про подобные "замыкания". ничего вы не сломаете, как минимум нечаянно
    Ответ написан
    Комментировать
  • Стоит ли использовать TypeScript в Redux?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Если переводите приложение на тайпскрипт - то имеет смысл переводить его полностью. Не важно редьюсеры там или еще что.
    Вот чего точно не стоит - это держать вперемешку js и ts код.
    Ответ написан
    Комментировать