Typescript классы расширяет Tuple - PullRequest
0 голосов
/ 23 октября 2018

Я ищу способ расширения кортежа в TypeScript.

В C # вы можете легко сделать:

public class extends String { ... }

В TypeScript я хотел бы иметь возможностьнапишите что-то вроде этого:

export class Field extends [string, string] { ... }

Есть идеи?

Примечание: моя цель - назвать каждого члена кортежа.

1 Ответ

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

Если вам нужно назвать членов кортежа, вам лучше использовать интерфейс.

Если вы действительно хотите получить кортеж, вы можете сделать это, но вам понадобится конструктор кортежа, который будет действовать как базовый класс.Кортежи во время выполнения - это просто массивы в javascript, так что мы действительно хотим ввести псевдоним для конструктора Array, так что вы действительно наследуете Array:

const tupleConstructor: new (...p: [string, string]) => [string, string] = Array as any;
class Field extends tupleConstructor{ 
  constructor(...p: [string, string]) {
    super(...p);
    (this as any).__proto__ = Field.prototype; // fix for inheriting arrays
  }
  get firstName() { return this[0]; }
  get lastName() { return this[1];}
}

let a = new Field("1", "1");
let [a0, a1] = a;
console.log(`0: ${a0}`);
console.log(`1: ${a1}`);

let { firstName, lastName} = a;
console.log(`firstName: ${firstName}`);
console.log(`lastName: ${lastName}`);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...