Функция как функциональный параметр - PullRequest
0 голосов
/ 22 апреля 2020

В Typescript мне нужно передать функцию другой функции в качестве параметра по умолчанию; в вызывающей программе я написал:

const fixCountryGroup=(
            countryGroups: WithId<country_groups.CountryGroup<"ISO3166A3">>[]
        ): WithId<country_groups.CountryGroup<"ISO3166A3">>[] {
            const excludedCountries: string[] = ["TOTAL", "EU28_FOR", "NEU28_FOR"];
            return countryGroups.filter((record) => {
                return !excludedCountries.includes(record.ISO3166A3);
            });
        }

и вызов функции:

 c += this.buildAggregation(
            self.tempRecordsSingleOrigin,
            self.dstCollection,
            false,
            {
                age: "$extras.age",
                sex: "$extras.sex",
                c_citizen: "$extras.c_citizen"
            },
            "$time_dim",
            "$time_dim_value",
            idExtra,
            fixCountryGroup
        );

Теперь в вызываемой функции у меня есть:

   protected buildAggregation(
        collection: Collection<DDHRecordSingleOrigin>,
        aggCollection: Collection<DDHRecord>,
        reverse: boolean = false,
        additionalGroupingIdFields: { [k: string]: string } = {},
        timeDimField: string = "$time_dim",
        timeDimValueField = "$time_dim_value",
        extrasProvider: (
            record: DDHAggregationRecord
        ) => { [key: string]: any } = (_d) => {
            return {};
        },
        fixCountryGroup: (
            countryGroups: WithId<country_groups.CountryGroup<"ISO3166A3">>[]
        ) => { countryGroups: WithId<country_groups.CountryGroup<"ISO3166A3">>[] | undefined} = (x){return undefined}

Ошибка параметра fixCountryGroup:

(parameter) fixCountryGroup: (countryGroups: WithId<country_groups.CountryGroup<"ISO3166A3">>[]) => {
    countryGroups: WithId<country_groups.CountryGroup<"ISO3166A3">>[] | undefined;
}
Type '(x: WithId<CountryGroup<"ISO3166A3">>[]) => undefined' is not assignable to type '(countryGroups: WithId<CountryGroup<"ISO3166A3">>[]) => { countryGroups: WithId<CountryGroup<"ISO3166A3">>[] | undefined; }'.
  Type 'undefined' is not assignable to type '{ countryGroups: WithId<CountryGroup<"ISO3166A3">>[] | undefined; }'.ts(2322)

Как мне записать параметр fixCountryGroup в вызываемой функции?!?

1 Ответ

0 голосов
/ 22 апреля 2020

не уверен, что вы хотите, но сделайте это (исправьте тип возврата, чтобы разрешить неопределенное):

fixCountryGroup: (
    countryGroups: WithId<country_groups.CountryGroup<"ISO3166A3">>[]
) => { countryGroups: WithId<country_groups.CountryGroup<"ISO3166A3">>[] } | undefined = (x) => undefined

или это (исправьте fn по умолчанию, чтобы вернуть разрешенный интерфейс):

fixCountryGroup: (
    countryGroups: WithId<country_groups.CountryGroup<"ISO3166A3">>[]
) => { countryGroups: WithId<country_groups.CountryGroup<"ISO3166A3">>[] | undefined } = (x) => ({countryGroups: undefined })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...