Создать тип объединения в машинописи с помощью методов класса
Я смотрю на некоторый унаследованный код, и они создали все редукторы как методы экземпляра класса:
@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 ответ
Решение
Если вы хотите объединить все ключи в тип, который вы можете использовать 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"