打字稿中通用联合的不同部分

时间:2019-12-24 06:35:32

标签: javascript typescript

我想实现以下功能

const foo = <S>(newState: S | ((prevState: S) => S)) => {...}

因此它要么采用S类型的新状态,要么采用从旧状态产生新状态的函数。

在实施中如何区分这些选项?我假设typeof newState === 'function'不能正常工作,因为S也可以是一个函数。

我使用的是打字稿,但解决方案可能与JS而不是TS有关。

1 个答案:

答案 0 :(得分:0)

如前所述,您可以使用typeof解决问题,例如:

if(typeof newState === 'function') {
    newState();
} else {
    // do whatever you want
}