繁体   English   中英

从接口泛型中键入推断

[英]Type inference from interface generics

我有一个接口,它接受两个显式的通用参数:

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

执行此操作的唯一方法是使用额外的函数并利用函数的推理行为。 为了推断函数的参数,我们需要使用一个返回函数方法的函数:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM