gemini-testing / testplane

Testplane (ex-hermione) browser test runner based on mocha and wdio
https://testplane.io
MIT License
687 stars 62 forks source link

hermione.ctx нельзя типизировать #883

Closed hheimerd closed 4 months ago

hheimerd commented 5 months ago

Verify latest release

Hermione version

8.5.0

Last Hermione version that worked

7.x.x

Which area(s) of Hermione are affected? (leave empty if unsure)

No response

Link to the code that reproduces this issue or a replay of the bug

No response

Reproduction steps

interface HermioneExtendedContext {
    ctx: {
        someExtendedFn(): void;
    }
}

declare global {
    // Не является глобальным типом, даже если бы являлся, то нельзя переопределить поле
    interface GlobalHelper {
        ctx: HermioneExtendedContext;
    }

    // Глобальные константы нельзя переопределить
    const hermione: {
        ctx: HermioneExtendedContext;
    }
}

hermione.ctx.someExtendedFn (unknown)

Actual Behavior

hermione.ctx нельзя типизировать, все поля явно указаны как unknown. Глобальный объект hermione нельзя расширить

Expected Behavior

Должен быть способ переопределения типа hermione.ctx и расширения интерфейса GlobalHelper.

Раньше в типах ctx был Record<string, any>, и это не мешало, теперь ctx: Record<string, unknown>, и TS ругается на использование полей ctx без каста. Вставлять везде typeguard - не вариант, слишком много бесполезного кода. К тому же раньше Hermione.GlobalHelper был глобальным типом и можно было сделать поле extendedCtx, а сейчас это просто экспортированный тип, и его нельзя расширить.

Which Node.js version are you using?

20.10.0

hheimerd commented 5 months ago

Предлагаю сделать откат до варианта с неймспейсом. Или назвать интерфейс HermioneGlobalHelper, если нет желания связываться с неймспейсами. плейграунд

KuznetsovRoman commented 4 months ago

@hheimerd, #888 удовлетворит ваши запросы?

hheimerd commented 4 months ago

Да, идеально

KuznetsovRoman commented 4 months ago

@hheimerd Released as 8.7.0