Расширить функцию машинописи в вызываемый объект - PullRequest
0 голосов
/ 09 октября 2018

Я бы хотел расширить describe Мокко с помощью функции forUsers, которая создала бы несколько описаний.Один на каждого пользователя.

Исходное описание:

interface IContextDefinition {
    (description: string, callback: (this: ISuiteCallbackContext) => void): ISuite;
    only(description: string, callback: (this: ISuiteCallbackContext) => void): ISuite;
    skip(description: string, callback: (this: ISuiteCallbackContext) => void): void;
    timeout(ms: number): void;
}

Мое расширение:

declare namespace Mocha {
    interface IContextDefinition {
        forUsers(description: string, users: userType[], callback: (this: ISuiteCallbackContext, user: Cypress.userType) => void): void
        only: {
            (description: string, callback: (this: ISuiteCallbackContext) => void): ISuite
            forUsers(description: string, users: userType[], callback: (this: ISuiteCallbackContext, user: userType) => void): void
        }
        skip: {
            (description: string, callback: (this: ISuiteCallbackContext) => void): ISuite
            forUsers(description: string, users: userType[], callback: (this: ISuiteCallbackContext, user: userType) => void): void
        }
    }
}

Но я получаю эту ошибку:

Subsequent property declarations must have the same type.  Property 'only' must be of type '(description: string, callback: (this: ISuiteCallbackContext) => void) => ISuite', but here has type '{ (description: string, callback: (this: ISuiteCallbackContext) => void): ISuite; forUsers(description: string, users: userType[], callback: (this: ISuiteCallbackContext, user: userType) => void): void; }'.

То, что only, может быть только оригинального типа, даже если новый тип включает в себя старый.

1 Ответ

0 голосов
/ 10 октября 2018

Правильно, если свойство имеет жестко запрограммированный тип (в отличие от интерфейса, который вы можете дополнить), вы не можете изменить тип.Если вы действительно хотите изменить тип only, а не перепроектировать расширение API таким образом, чтобы его можно было объявить с помощью дополнения, то вам нужно будет разветвить объявления типов Mocha;см. этот ответ о возможных способах сделать это.

...