Ошибка перегрузок в JSDoc в отличии от TypeScript

Описание

Создаю простые классы для работы с векторами 1D и 2D в TypeScript. В нем так же добавляю "оператор +" с перегрузками чтобы было удобнее работать:

class Vector1 {
    static ["+"](vector: Readonly<Vector1>, scalar: number): Vector1;
    static ["+"](first: Readonly<Vector1>, second: Readonly<Vector1>): Vector1;
    static ["+"](arg1: Readonly<Vector1>, arg2: Readonly<Vector1> | number): Vector1 {
        // Код не важен
        return new Vector1();
    }
    x: number;
}

class Vector2 extends Vector1 {
    static ["+"](vector: Readonly<Vector2>, scalar: number): Vector2;
    static ["+"](first: Readonly<Vector2>, second: Readonly<Vector1>): Vector2;
    static ["+"](first: Readonly<Vector2>, second: Readonly<Vector2>): Vector2;
    static ["+"](arg1: Readonly<Vector2>, arg2: Readonly<Vector2> | Readonly<Vector1> | number): Vector2 {
        // Код не важен
        return new Vector2();
    }
    y: number;
}

С этим проблем нет, отлично компилируется. Но, если я пытаюсь тот же код написать с JavaScript + JSDoc при включенной проверки типизации...

class Vector1 {
    /**
     * @overload
     * @param {Readonly<Vector1>} vector 
     * @param {number} scalar 
     * @returns {Vector1} 
     */
    /**
     * @overload
     * @param {Readonly<Vector1>} first 
     * @param {Readonly<Vector1>} second 
     * @returns {Vector1} 
     */
    /**
     * @param {Readonly<Vector1>} arg1 
     * @param {Readonly<Vector1> | number} arg2 
     * @returns {Vector1} 
     */
    static ["+"](arg1, arg2) {
        return new Vector1();
    }
    /** @type {number} */
    x;
}

class Vector2 extends Vector1 {
    /**
     * @overload
     * @param {Readonly<Vector2>} vector 
     * @param {number} scalar 
     * @returns {Vector2} 
     */
    /**
     * @overload
     * @param {Readonly<Vector2>} first 
     * @param {Readonly<Vector1>} second 
     * @returns {Vector2} 
     */
    /**
     * @overload
     * @param {Readonly<Vector2>} first 
     * @param {Readonly<Vector2>} second 
     * @returns {Vector2} 
     */
    /**
     * @param {Readonly<Vector2>} arg1 
     * @param {Readonly<Vector2> | Readonly<Vector1> | number} arg2 
     * @returns {Vector2} 
     */
    static ["+"](arg1, arg2) {
        return new Vector2();
    }
    /** @type {number} */
    y;
}

... то у компилятора бурные эмоции:

Class static side 'typeof Vector2' incorrectly extends base class static side 'typeof Vector1'.

Types of property '["+"]' are incompatible.

Type '{ (vector: Readonly, scalar: number): Vector2; (first: Readonly, second: Readonly): Vector2; (first: Readonly<...>, second: Readonly<...>): Vector2; }' is not assignable to type '{ (vector: Readonly, scalar: number): Vector1; (first: Readonly, second: Readonly): Vector1; }'.

Types of parameters 'vector' and 'vector' are incompatible.

Property 'y' is missing in type 'Readonly' but required in type 'Readonly'.ts(2417)

Вопрос

  • В чем собственно разница? Ведь проверку в обоих случаях выполняет компилятор TS.
  • Как решить данную проблему? Все-таки от перегрузок отказаться не хочется.

Дополнительно

Конфигурации:

{
    "javascript.format.semicolons": "insert",
    "javascript.inlayHints.enumMemberValues.enabled": true,
    "javascript.inlayHints.variableTypes.enabled": true,
    "javascript.inlayHints.propertyDeclarationTypes.enabled": true,
    "javascript.updateImportsOnFileMove.enabled": "always",
    "javascript.referencesCodeLens.enabled": true,
    "javascript.referencesCodeLens.showOnAllFunctions": true,
    "javascript.inlayHints.functionLikeReturnTypes.enabled": true,
    "javascript.suggest.classMemberSnippets.enabled": false

    "typescript.format.semicolons": "insert",
    "typescript.preferences.importModuleSpecifier": "project-relative",
    "typescript.implementationsCodeLens.enabled": true,
    "typescript.referencesCodeLens.enabled": true,
    "typescript.referencesCodeLens.showOnAllFunctions": true,
    "typescript.updateImportsOnFileMove.enabled": "always",
    "typescript.inlayHints.enumMemberValues.enabled": true,
    "typescript.inlayHints.functionLikeReturnTypes.enabled": true,
    "typescript.inlayHints.propertyDeclarationTypes.enabled": true,
    "typescript.inlayHints.variableTypes.enabled": true

    "js/ts.implicitProjectConfig.checkJs": true,
    "js/ts.implicitProjectConfig.target": "ESNext",
    "js/ts.implicitProjectConfig.experimentalDecorators": true,
}

Ответы (1 шт):

Автор решения: eccs0103

Проблема оказалось багом.

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

→ Ссылка