【问题标题】:Type inference from interface generics接口泛型的类型推断
【发布时间】:2018-06-11 14:27:22
【问题描述】:

我有一个带有两个显式泛型参数的接口:

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.selectorstypeof Counter.actions

【问题讨论】:

    标签: typescript generics type-inference


    【解决方案1】:

    做到这一点的唯一方法是使用额外的函数并利用函数的推理行为。为了推断函数的参数,我们需要使用一个返回函数方法的函数:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多