как прикрепить функцию toArray к свойству интерфейса? - PullRequest
1 голос
/ 06 апреля 2020

Рассмотрим эту настройку.

interface C {
  foo: string
}
interface A {
  B: Record<string, C>
  // ... some more properties
}
const test: A = {
  B: { hi: {foo: "hello"} }
  // ... some more properties
}

Теперь я хочу иметь возможность

test.B.toArray()

, что будет делать

Object.values(test.B)

Теперь вот частичное решение Я придумал, что меня не устраивает.

interface C {
  foo: string;
}
interface A {
  B: { value: Record<string, C>; toArray: () => Array<C> };
}

const test: A = {
  B: {
    value: { hi: { foo: "hello" } },
    toArray: function (): Array<C> {
      return Object.values(this.value);
    },
  },
};

//Why I am not happy with this solution is I now have to refer to
test.B
// as 
test.B.value

1 Ответ

0 голосов
/ 06 апреля 2020

Используя &, вы сможете сказать, что хотите, чтобы интерфейс также реализовывал функцию.

interface A {
  B: Record<string, C & { toArray: () => Array<C> }>
  // ... some more properties
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...