Методы класса TypeScript имеют ту же перегруженную сигнатуру, что и конструктор - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь добавить набор шрифтов TypeScript в стороннюю библиотеку JavaScript.Большинство методов класса принимают другой экземпляр того же класса и возвращают новый экземпляр, но они также будут принимать те же перегруженные аргументы конструктора вместо фактического экземпляра класса.Я пытаюсь избежать написания одной и той же перегруженной подписи для каждого из множества методов класса, но я не уверен, как именно это сделать в моем файле .d.ts.

Например, я мог бы записать каждыйтакой как ...

class Foo {
  constructor(x: number);
  constructor(x: number, y: number);
  constructor({ x: number, y: number });

  Fizz(foo: Foo): Foo;
  Fizz(x: number): Foo;
  Fizz(x: number, y: number): Foo;
  Fizz({ x: number, y: number }): Foo;

  Buzz(foo: Foo): Foo;
  Buzz(x: number): Foo;
  Buzz(x: number, y: number): Foo;
  Buzz({ x: number, y: number }): Foo;

  // etc... for several methods
}

Но было бы предпочтительнее сделать что-то вроде ...

class Foo {
  constructor(x: number);
  constructor(x: number, y: number);
  constructor({ x: number, y: number });

  // I'd like some sort of syntax like...
  Fizz(constructor()): Foo;
  Buzz(constructor()): Foo;
}

Можно ли легко объявить и повторно использовать подпись перегруженного метода?

1 Ответ

0 голосов
/ 15 октября 2018

Вы можете легко объединить подписи для функций-членов:

// Consolidate the signatures
type CreatesFoo = {
    (foo: Foo): Foo;    
    (x: number): Foo;
    (x: number, y: number): Foo;
    (obj: { x: number, y: number }): Foo;
}

class Foo {
  constructor(x: number);
  constructor(x: number, y: number);
  constructor(obj: { x: number, y: number });
  constructor(...args:any[]) {}


  Fizz: CreatesFoo = (): any => {
  }

  Buzz: CreatesFoo= (): any => {
  }

  // etc... for several methods
}

Однако конструктор не может быть объединен в одну подпись.Самый простой способ - просто перечислить его, как я это сделал ?

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