Как исправить ошибку с итератором при spread операторе, если функция может возвращать массив или объект?

Есть функция, которая может возвращать массив или объект:
public static getSymbols(getSymbolsOnly = false): string[] | { symbols: string[], group: string } {
    const symbols = ['Symbol 1', 'Symbol 2'];

    if (getSymbolsOnly) {
      return symbols;
    }
    
    return {
      symbols: symbols,
      group: 'Group name',
    }
  }


Я хочу использовать ее резeльтат в spread операторе
const symbols = InstrumentsService.getSymbols(true);

          assetSymbols = [
            ...symbols
          ]


Есть ошибка : TS2488 Type string[] | { symbols: string[], group: string } must have a [Symbol.iterator]() method that return an iterator
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
WblCHA
@WblCHA
https://www.typescriptlang.org/play?#code/JYOwLgpg...

interface SomeType {}

class SomeClass {
    static getSymbols(): SomeType;
    static getSymbols(getSymbolsOnly: true): string[];
    static getSymbols(getSymbolsOnly: false): SomeType;
    static getSymbols(getSymbolsOnly: boolean = false): string[] | SomeType {
        if(getSymbolsOnly) {
            return [];
        }
        return {};
    }
}

const t1 = SomeClass.getSymbols(); // SomeType
const t2 = SomeClass.getSymbols(true); // string[]
const t3 = SomeClass.getSymbols(false); // SomeType
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sarapinit
@sarapinit
Точу водой камень
const assetSymbols = Array.isArray(symbols) ? [...symbols] : [...symbols.symbols];
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы