Свойство '<properyName>' экспортируемого интерфейса имеет или использует личное имя '<name>' - PullRequest
1 голос
/ 11 марта 2020

Я объявляю interface:

export interface ApiClientMetodOptions {
    initialFilterSatement?: string;
    fieldsMapping?: {
        [K in keyof P]?: string;
    };
    requestParams?: IRequestParams<P>;
    additionalParams?: {
        [key: string]: unknown;
    };
    additionalHeaders?: {
        [key: string]: string;
    };
    cancelOption?: IRequestCancelOption;
}

, но получаю следующую ошибку: Property 'fieldsMapping' of exported interface has or is using private name 'P'. Я сделал это для инкапсуляции типа и использования его в некоторых методах. Например:

export interface IApiClient {
    /**
     * Generic function for fetching a list of a certain instances
     * @param fieldsMapping function converting fields of `P`-type object to a query field names
*/
getEntities<P, T>(
    url: string,
    options: {
        instanceToEntity?: (instance: unknown) => T;
    } & ApiClientMetodOptions,
): Promise<T[]>;

Я не знаю "typescript" очень глубоко. Что я делаю не так и как решить эту проблему?

1 Ответ

1 голос
/ 11 марта 2020

Вам нужно добавить универсальный c параметр P в определение вашего интерфейса следующим образом:

export interface ApiClientMetodOptions<P> {
    initialFilterSatement?: string;
    fieldsMapping?: {
        [K in keyof P]?: string;
    };
    requestParams?: IRequestParams<P>;
    additionalParams?: {
        [key: string]: unknown;
    };
    additionalHeaders?: {
        [key: string]: string;
    };
    cancelOption?: IRequestCancelOption;
}

А затем в определении вашего метода также добавить параметр:

export interface IApiClient {
    /**
     * Generic function for fetching a list of a certain instances
     * @param fieldsMapping function converting fields of `P`-type object to a query field names
*/
getEntities<P, T>(
    url: string,
    options: {
        instanceToEntity?: (instance: unknown) => T;
    } & ApiClientMetodOptions<P>,
): Promise<T[]>;
...