两个布尔值的Typescript元组被推断为boolean类型的数组

htt*_*ick 5 tuples rxjs typescript behaviorsubject

我试着制作一个由两个布尔组成的元组 BehaviorSubject

private someBehaviorSubject: BehaviorSubject<[boolean, boolean]> = new BehaviorSubject([false, false]);
Run Code Online (Sandbox Code Playgroud)

但我得到一个编译错误说:

Type 'BehaviorSubject<boolean[]>' is not assignable to type 'BehaviorSubject<[boolean, boolean]>'
Run Code Online (Sandbox Code Playgroud)

如何创建两个布尔值的元组,并正确初始化BehaviorSubject?它似乎认为[false, false]是类型boolean[]而不是索引为0的元组,索引1需要是布尔值.

打字稿版本: 2.3.3

来自rxjs v的BehaviorSubject5.0.1

E_n*_*ate 9

在TypeScript中使用元组目前有点棘手.数组文字可能会被意外地推断为数组类型而不是元组,这就是在这种情况下发生的事情.编译器new BehaviorSubject([false, false])过于急切地解决了类型的对象BehaviorSubject<boolean[]>,而没有检查目标变量的类型.这是一个已知的关注和许多相关问题进行了问题跟踪发布(#16391,#15656,甚至更多),并建议已经奠定了解决这一问题(#10195,#16656,...).

对于推理失败的特定情况,您可能只需要求助于:

private someBehaviorSubject = new BehaviorSubject([false, false] as [boolean, boolean]);
Run Code Online (Sandbox Code Playgroud)