TypeScript联合类型约束性不足的问题求助
TypeScript联合类型约束性不足的问题求助
各位TypeScript大佬们,我最近碰到个特别困惑的问题,想请教下大家!
我一直以为,当我把两个对象类型A和B组成联合类型后,赋值给这个联合类型的变量,必须严格匹配A或者B其中一个的结构才行。
结果实际写代码的时候却发现不对——我定义了一个叫bad的对象,它既不符合A的类型约束,也不符合B的约束,但TypeScript居然没给我报类型错误,这完全和我预想的不一样啊!
给大家看我写的测试代码:
type A = { a: string }; type B = { b: number }; type Union = A | B; // 这两个是符合预期的,没有问题 const goodA: Union = { a: "hello" }; const goodB: Union = { b: 123 }; // 重点是这个!它既不是A也不是B,但TS居然不报错 const bad: Union = { a: 123, b: "hello" };
我实在搞不懂,按道理说bad的a属性是数字,不符合A里a为字符串的要求,而且还多了b属性;同时它的b是字符串,也不符合B里b为数字的要求,还多了a属性。为什么TypeScript就不识别这个错误呢?有没有办法能让联合类型严格约束变量必须完全匹配其中某一个类型的结构呀?
备注:内容来源于stack exchange,提问作者ElohmroW
相关产品推荐
相关产品推荐

