Nano Hash - криптовалюты, майнинг, программирование

Определение TypeScript (d.ts) для Q noConflict()

В настоящее время я работаю над проектом, в котором использую библиотеку Q для промисов с TypeScript.

В новейшей версии Q есть метод Q.noConflict(). Для ввода я использую файл .d.ts из Определенно типизированный репозиторий.

Набор текста не поддерживает Q.noConflict(). Я пытался несколько часов переписать набор текста для поддержки этого метода, но безуспешно.

Я хотел бы использовать такой код:

var myQ = Q.noConflict();

Где myQ относится к типу Q. Но в .d.ts Q есть модуль, который имеет не только функции, но и интерфейсы. Это означает, что я не могу просто добавить что-то вроде этого noConflict(): Q.

Вот схема из файла определения (не весь файл, а со всеми соответствующими частями):

объявить функцию Q(значение: T): Q.Promise;

declare module Q {
    interface IPromise<T> {
        then<U>(onFulfill?: (value: T) => U | IPromise<U>, onReject?: (error: any) => U | IPromise<U>): IPromise<U>;
   }

    interface Deferred<T> {
        promise: Promise<T>;
    }

    interface Promise<T> {
        get<U>(propertyName: String): Promise<U>;
    }

    export function when(): Promise<void>;

    export function resolve<T>(object: T): Promise<T>;
}

declare module "q" {
    export = Q;
}

Конечно, я не ожидаю получить весь код, но было бы здорово получить некоторые подсказки от людей, которые уже написали несколько файлов .d.ts.


  • Если вы используете модули, вам вообще не нужно noConflict. 24.06.2015
  • Приложение, которое я пишу, будет динамически загружаться на такие страницы, как, например. Карты Гугл. Это означает, что я не должен переопределять глобальные переменные (поскольку Q один). Поэтому я думаю, что должен использовать noConflict. 25.06.2015
  • Нет; это просто означает, что вам нужно обернуть IIFE, чтобы вы вообще не создавали глобальные переменные. Модульные системы (например, Browserify) сделают это автоматически. 25.06.2015
  • Извините, я не понимаю. Предположим, я загружаю свое приложение на страницу. На этой странице присутствуют jQuery v2.x и Q v0.9. Моему коду нужны jQuery v1.x и Q v1. Затем мне нужно использовать сначала noConflict() после загрузки, чтобы освободить/установить предыдущие глобальные переменные, а затем передать мои версии в мой модуль. 25.06.2015
  • Нет. Вы должны запускать весь свой код через Browserify или аналогичные инструменты, чтобы никогда не создавать глобальные переменные. (вместо прямой загрузки скриптов) 25.06.2015

Ответы:


1

Используйте typeof Q в качестве возвращаемого типа:

declare module Q {
    // ...
    export function noConflict(): typeof Q;
    // ...
}
24.06.2015
  • Это работает для меня! Спасибо. Если я сделаю это, то теперь смогу использовать следующий код: export var q = Q.noConflict(); var promises = new Array<Q.IPromise<void>>(); promises.push(method1); promises.push(method2); return q.all(promises); Поскольку компилятор TypeScript игнорирует объявления типов, использование Q.x для типов не является проблемой. 25.06.2015
  • Я внес это в qdts проекта DefinitelyTyped github.com/borisyankov/DefinitelyTyped /проблемы/. 27.06.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..