打字稿已识别并带有通用的,不正确的类型缩小的联合

时间:2019-12-13 21:33:04

标签: typescript generics

以下代码使用Typescript 3.5.3成功编译,但似乎不应允许使用,我想知道为什么它能够成功编译。我创建了一个类型A,该类型具有一个字段a和一个在t上参数化的泛型函数X,该函数接受一个参数,该参数是泛型{{ 1}}和类型X。函数A内部的'a' in a防护似乎将t的类型缩小为a,但是,您可以想象另一种类型的A带有一个将通过此检查的另一个字段B

a

此外,我可以这样调用此函数:

type A = {"a": string}
type B = {"a": number}

function t<X>(a: A | X, f: (x:X) => string): string {
  if ('a' in a) {
    return a.a;
  } else {
    return f (a);
  }
}

我知道Typescript的类型系统是故意不健全的,但是我无法弄清楚为什么这个示例是不健全的。任何见解将不胜感激。

0 个答案:

没有答案