在Typescript中,如何在给定类型检查和区分联合的情况下返回推断类型?

时间:2017-10-19 06:00:14

标签: typescript

我们说我有一个有区别的联合类型,例如:

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可以推断过滤函数的返回类型,那将是很酷的,因为我们正在检查联合类型的鉴别器。

但我想如果没有施法,那是不可能的。

0 个答案:

没有答案