как использовать одну и ту же функцию для разных типов ввода? - PullRequest
1 голос
/ 09 июля 2020

Как написать функцию, которая принимает другой тип ввода?

Я хочу написать функцию, которая принимает Виктора как (array | object: {x, y}); Но TypeScript часто жалуется!

I t

function dist(x1,y1,x2 = 0,y2 = 0) { 
  if (x1?.constructor == Array && y1?.constructor == Array) {
    return dist(...x1, ...y1);
  }
  if (x1?.constructor == Object && y1?.constructor == Object) {
    return dist(x1.x, x1.y, y1.x, y1.y);
  }

  let a = x2 - x1,
    b = y2 - y1;
  return Math.sqrt(a * a + b * b);
}

console.log(
dist(0,0,1,1),
dist([0,0],[1,1]),
dist({x:0,y:0},{x:1,y:1})
)

hink Это неправильный способ сделать это. Также TypeScript совсем не устраивает.

1 Ответ

1 голос
/ 09 июля 2020

возможно, это именно то, что вы ищете:

function divide(x: number, y: number): number;
function divide(str: string, y: number): string[];

function divide(x: any, y: number): any {
    if (typeof x == 'number') {
        return x / y;
    } else if (typeof x == 'string') {
        return [x.substring(0,y), x.substring(y)];
    }
}

let n: number = divide(6, 2);
console.log(n);
let s: string[] = divide("football",4);
console.log(s);

Дополнительная информация: функции перегрузки в JS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...