@Ne7Le4Der

Как написать функцию TypeScript?

let a: string[] | CustomClass[];

    test(a);

   function test(data: string[]) {
        //Some code
   }


Argument of type 'string[] | 'CustomClass[]' is not assignable to parameter of type 'string[]'.


Мне нужно чтобы при string[] выполнялась функция, а при CustomClass[] просто возвращался переданный аргумент. Пробовал сделать перегрузку, но не смог сделать правильно.
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
Что-то вроде такого можно сделать:
type TestResult<T extends string[] | CustomClass[]> = T extends CustomClass[] ? T : void;
function test<T extends string[] | CustomClass[]>(data: T): TestResult<T> {
    if (data[0] instanceof CustomClass) {
      return data as TestResult<T>;
    }

    return undefined as TestResult<T>;
}

https://www.typescriptlang.org/play?#code/CYUwxgNg...

Но без приведения типов внутри не обойтись. Ну и как писал WbICHA в комментах, такие типы не безопасны для пустого массива, так как в рантайме типов нет, а значит и нет возможности проверить, какого типа пришел пустой массив.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы