我们无法知道类型保护中的类型推断失败,因为这个问题。也许 a is any[]
也应该返回 unknown[]。
TypeScript 版本: 3.7.x-dev.20200410
搜索词:
代码:
declare function f(a: any): a is any[];
declare function g(a: any): a is unknown[];
declare const a: readonly number[];
f(a) && a; // any[]
g(a) && a; // not unknown[]
预期行为:
g 缩小 a 的类型为 unknown[]
。
实际行为:
g 缩小 a 的类型为 readonly number[] & unknown[]
。
** playground 链接:**https://www.typescriptlang.org/play/?ts=3.9.0-dev.20200410&ssl=1&ssc=1&pln=6&pc=11#code/CYUwxgNghgTiAEAzArgOzAFwJYHtVIAooAueKVATwEpSp4sBnMygbQF0BuAKFElgRTpseeAHMitSjTL0maANaocAd1TtuvaHHhg8DDGVJwowPBArxUyALYAjEDHVcuiIlXgAyD2W7io7rx8gA
相关问题:#17002
5条答案
按热度按时间q35jwt9p1#
这遵循了子类型减少的规则。
ukxgm1gy2#
那么,当有可能时,你能否将这个问题视为一个功能请求,支持未知默认类型时的类型保护?总是发布两个问题是麻烦的。
bvn4nwqk3#
你好,RyanCavanaugh。
l2osamch4#
@falsandtru sup?
cbeh67ev5#
@RyanCavanaugh Also #37999 . Your inconsistent (and unexplained) response is very murkiness. Explain the valid reason when closing the issue or changing the response. How explain #37999 .