Как выполнить именованный экспорт перегруженной функции в Typescript?

#javascript #typescript #export #overloading

#javascript #typescript #экспорт #перегрузка

Вопрос:

pickCard.ts

Это пример из:

https://www.typescriptlang.org/docs/handbook/functions.html#overloads

 function pickCard(x: { suit: string; card: number }[]): number;
function pickCard(x: number): { suit: string; card: number };
function pickCard(x: any): any {
  // Check to see if we're working with an object/array
  // if so, they gave us the deck and we'll pick the card
  if (typeof x == "object") {
    let pickedCard = Math.floor(Math.random() * x.length);
    return pickedCard;
  }
  // Otherwise just let them pick the card
  else if (typeof x == "number") {
    let pickedSuit = Math.floor(x / 13);
    return { suit: suits[pickedSuit], card: x % 13 };
  }
}

export pickCard; // DOES NOT WORK
  

Я не могу использовать выражение функции типа: export const pickCard = () => {}; потому что перегрузки не будут работать с выражениями функций.

ВОПРОС

Как я могу выполнить именованный экспорт pickCard функции. Примечание: имя должно быть pickCard

Ответ №1:

Это сработало для меня:

 export function pickCard(x: { suit: string; card: number }[]): number;
export function pickCard(x: number): { suit: string; card: number };
export function pickCard(x: any): any {
  // Check to see if we're working with an object/array
  // if so, they gave us the deck and we'll pick the card
  if (typeof x == "object") {
    let pickedCard = Math.floor(Math.random() * x.length);
    return pickedCard;
  }
  // Otherwise just let them pick the card
  else if (typeof x == "number") {
    let pickedSuit = Math.floor(x / 13); 
    return { suit: suits[pickedSuit], card: x % 13 };
  }
}
  

Использовать в другом файле:

 import { pickCard } from ".";

pickCard([{ suit: 'test', card: 10 }]);
pickCard(21);