создать тип объединения в машинописи с помощью методов класса - PullRequest
0 голосов
/ 08 января 2019

Я смотрю на унаследованный код, и они создали все редукционные редукторы как методы экземпляров класса:

@Injectable()
export class PeopleActions {
    constructor(private ngRedux: NgRedux<any>) {}

    add() {
      this.ngRedux.dispatch({ADD, payload: {foo: 'bar;});
    }

    remove() {
      this.ngRedux.dispatch({Remove, payload: {foo: 'bar;});
    }
    // etc.

Я бы обычно создавал их как отдельные функции

export function add { // etc.}
export function remove { // etc.}

А затем создайте объединение:

type MyActions = add | remove;

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

1 Ответ

0 голосов
/ 08 января 2019

Если вы хотите объединить все ключи в типе, который вы можете использовать keyof

type MyActions = keyof PeopleActions; // "add" | "remove"

Если у класса также есть открытые поля, которые не являются методами, и вы хотите отфильтровать их, вы можете использовать условный тип:

type ExtractFunctionKeys<T> = { [P in keyof T]-?: T[P] extends Function ? P : never}[keyof T]
type MyActions = ExtractFunctionKeys<PeopleActions>; // "add" | "remove"
...