type X = { a: 1; b: number } | { a: 2; b: string };
declare const foo: X & { a: 1 };
foo.b.toFixed(0);
// ~~~~~~~
// Property 'toFixed' does not exist on type 'string'.
我希望使X
和{ a: 1 }
相交会消灭{ a: 2, … }
部分,因此foo实际上就是{ a: 1; b: number }
这为什么不起作用?
答案 0 :(得分:1)
这不是交叉路口的工作方式,交叉路口意味着结果类型必须规定交叉路口的所有成员,无论实际上是否可行。
您要寻找的是Extract
条件类型
type X = { a: 1; b: number } | { a: 2; b: string };
declare const foo: Extract< X, { a: 1 }>
foo.b.toFixed(0);