我们说我有一个有区别的联合类型,例如:
interface State {
mode: {type: 'mode1'; someProperty: number;} | {type: 'mode2'; differentProperty: string;}
}
我正在使用包含该类型的包装器作为上下文中的泛型参数:
const myWrapper = Wrapper<State>();
我想在包装器上创建一个能够缩小&#39;模式范围的功能。属性的类型并在上下文中返回。 e.g。
myWrapper.when(m => m.type === "mode1").do(m => console.log(m.someProperty)
这样&#39;当&#39;方法返回给定作为参数提供的检查的推断类型。
任何提示?
我的上一段代码是相当概念性的,所以没有实施#39;我可以分享的Wrapper
...
但是通过更多的游戏,我找到了一种更好的方式来描述我正在寻找的东西......
请考虑以下代码:
type FooBar = { type: 'foo' } | { type: 'bar' };
const fooBars: FooBar[] = [];
const foos = fooBars.filter(b => b.type == "foo");
此处的问题是,类型推断会将foos
解析为{ type: 'foo' } | { type: 'bar' }
,即使我们知道它们都是foo
。
如果TS可以推断过滤函数的返回类型,那将是很酷的,因为我们正在检查联合类型的鉴别器。
但我想如果没有施法,那是不可能的。