Вывод типа из интерфейса интерфейса - PullRequest
0 голосов
/ 11 июня 2018

У меня есть интерфейс, который принимает два явных общих параметра:

interface ConnectedComponent<TSelectors, TActions> {
  selectors: TSelectors;
  actions: TActions;
  (props: SelectorProps<TSelectors> & ActionProps<TActions>): any;
}

И вот как я его использую:

let selectors = { ... };
let actions = { ... };

let Counter: ConnectedComponent<typeof selectors, typeof actions> = props => { ... };
Counter.selectors = selectors;
Counter.actions = actions;

Я бы предпочел сделать так, чтобывыведите родовые типы из назначенных свойств:

let Counter: ConnectedComponent = { ... };
Counter.selectors = { ... };
Counter.actions = { ... };

Однако я не знаю, как захватить typeof Counter.selectors и typeof Counter.actions внутри интерфейса.

1 Ответ

0 голосов
/ 11 июня 2018

Единственный способ сделать это - использовать дополнительную функцию и воспользоваться поведением вывода функции.Чтобы получить вывод об аргументах функции, нам нужно использовать функцию, которая возвращает подход к функции:

interface ConnectedComponent<TSelectors, TActions> {
    selectors: TSelectors;
    actions: TActions;
    (props: SelectorProps<TSelectors> & ActionProps<TActions>): any;
}

function createConnectedComponent<TSelectors, TActions>(props: { selectors: TSelectors; actions: TActions; }): (fn: (props: SelectorProps<TSelectors> & ActionProps<TActions>) => any) => ConnectedComponent<TSelectors, TActions> {
    return fn => Object.assign(fn, props);
}
let Counter2 = createConnectedComponent({
    selectors: {
        // ...
    },
    actions: {
        // ...
    }
})(p => { /*...*/ }); //p is TSelectors & TActions as expected
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...