给定此函数签名:function foo<T extends X | Y>(bar: T, baz: T) {}
调用方不能混合使用X
和Y
。编译器强制要求bar
和baz
都是X
,或者都是Y
但是,对bar
的类型检查会缩小其类型,但不会缩小baz
的类型。证明:ts游乐场
方法体之外的这种对称性能否以某种方式延续到方法体中,从而使1类型检查缩小所有参数?
您的假设是错误的;一个比较的合法调用是
compare<string | number>(10, "");
因此,根据另一个类型来缩小一个参数的范围是无效的