TypeScript 中使用联合类型时如果像下面的代码这样写,会发现 BaseType 的类型与预期的并不一致
BaseType
的预期类型应该为三种类型的联合类型,但是真正的类型却只有 unknown
类型。
原因是因为在 TypeScript 中,所有的类型都扩展了 unknown
类型,因为 BaseType
的类型就会被简化为 unknown
类型。
可以使用TypeScript的可区分联合类型 来解决
Infer
的逻辑为: 检查 T
是否是 BaseUnkown
, 如果是,则返回 unkown
类型,否则判断是否是 BaseString
类型,依次类推