Параметр функции Typescript как объединение множества <T>и массива <T> - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь использовать тип объединения Set и Array в качестве параметра функции:

export function demo(
  items: Set<string> | string[]
): Set<string> {
  const allItems = new Set<string>();
  items.forEach((item: string) => {
    allItems.add(item);
  });
  return allItems;
}

Однако код не компилируется. Выдает следующее сообщение об ошибке:

Cannot invoke an expression whose type lacks a call signature. 
Type '((callbackfn: (value: string, value2: string, set: Set<string>) => void, thisArg?: any) => void) | ((callbackfn: (value: string, index: number, array: string[]) => void, thisArg?: any) => void)' has no compatible call signatures.

Я понимаю, что Set и Array имеют разные методы, но оба имеют метод forEach (), который я использую только один.

1 Ответ

2 голосов
/ 02 мая 2019

Если вы используете только forEach, вы можете просто определить тип следующим образом:

type WithForEach<T> = { 
   forEach: (callbackfn: (value: T) => void) => void; 
};

export const demo = (
    items: WithForEach<string>
): Set<string> => {
    const allItems = new Set<string>();
    items.forEach((item: string) => {
        allItems.add(item);
    });
    return allItems;
};

Он должен быть совместим с типами Set и Array.

...