Как вернуть это, сам тип из функции расширения в машинописи - PullRequest
0 голосов
/ 22 мая 2019

Я успешно реализовал некоторое расширение в машинописи, которое работает, но я хотел бы вернуть этот тип вместо void.

interface Array<T> {
  pushAll(other: T[]): void

  randomize(): void
}

Array.prototype.pushAll = function <T>(other: T[]): void {
  this.push(...other)
}

Array.prototype.randomize = function (): void {
  this.sort(() => Math.random() * 2 - 1)
}

Но когда я пытаюсь это сделать, это дает ошибки компиляции:

interface Array<T> {
  pushAll(other: T[]): this

  randomize(): this
}

Array.prototype.pushAll = function <T>(other: T[]): this {
  this.push(...other)
  return this
}

Array.prototype.randomize = function (): this {
  this.sort(() => Math.random() * 2 - 1)
  return this
}

Ошибка: этот тип доступен только в нестатических .... Также предложение any[] не работает. Также я устал объявить тип возвращаемого значения как T[], но безуспешно.

Я перехожу к машинописи из языков более высокого уровня, таких как kotlin, swift, c #, target-c, где это вполне возможно, так что я могу писать функции, которые я могу связать, при этом сохраняя безопасность типов. Благодарю.

(изменить) Я нашел обходной путь только для этого и некоторых других подобных случаев, возвращая тип Array<T>. Но я могу определить возвращение этого в интерфейсах и реализовать его, просто в определении функции прототипов это не сработает ..

1 Ответ

0 голосов
/ 22 мая 2019

Это обходной путь, но не совсем то, что я ищу.

interface Array<T> {
  pushAll(other: T[]): Array<T>

  randomize(): Array<T>
}

Array.prototype.pushAll = function <T>(other: T[]): Array<T> {
  this.push(...other)
  return this
}

Array.prototype.randomize = function <T>(): Array<T> {
  this.sort(() => Math.random() * 2 - 1)
  return this
}
...