Тип действия NGXS - PullRequest
       28

Тип действия NGXS

0 голосов
/ 12 марта 2019

Мне интересно, почему нет декоратора для определения строки типа действия, вместо объявления статической константы / переменной каждый раз, когда вы объявляете имя действия.

Я хоть о чем-то вроде этого:

function ActionType(type: string) {
  return (ctor: Function) => {
    ctor.type = type;
  }
}

@ActionType('Hello World !')
class MyAction {

}

Я не уверен, что добавление type в конструктор эквивалентно статическому члену, но я знаю, что после использования декоратора console.log(MyAction.type) выведет Hello World !, как если бы мы объявили статический член ,

Будет ли это работать?

1 Ответ

1 голос
/ 12 марта 2019

Я думаю, ты выглядишь примерно так:

function decorate(typ: string) {
  return function <T extends {new (...args) }>(cls: T): T & { type: string } {
    return class extends cls { 
      static type: string = typ;
    }
  }
}
@decorate("")
class Foo {
    static bar() {
        return 42
    }
}

Foo.type // ''

Странные части:

(arg: T) означает, что arg является экземпляром класса T. arg: { new (...args): T} означает, что arg является классом T (не экземпляром)

& оператор - это типы слияния из двух интерфейсов, например { key1: string } & { key2: number } равно { key1: string, key2: number }

return class extends cls означает, что мы возвращаем анонимный класс, который расширяет cls (в этом случае Foo). Мы добавляем к нему статический тип: string, потому что мы принудительно добавили T & { type: string } part

Детская площадка

...