为何T3Class3实现T3无报错?string & number & boolean类型疑问
为什么T3Class3实现T3接口不报错?
先明确几个核心点:
string & number & boolean是无交集的交叉类型,等价于TypeScript里的never类型——没有任何值能同时属于这三个原始类型,所以这个类型的参数永远无法接收到合法输入。- TypeScript判断类实现接口的重载方法时,只要类的方法能兼容所有重载的调用场景即可。
而never类型的特殊性在于:它是所有类型的子类型,且参数为never的函数本质上是不可被合法调用的。因为你根本找不到一个值既能是string、又能是number、还能是boolean,所以这个func方法永远不会被以符合接口要求的方式调用(传number/string/boolean都会触发类型错误)。
站在TypeScript的类型安全角度,既然这个方法永远不会被合法调用,那它自然不会违反接口的任何约束——毕竟不会出现“传入number但方法处理不了”的情况,因此编译器不会报错。
举个直白的例子:如果接口要求你的函数能接受猫、狗、鸟,而你写的函数只能接受一种不存在的动物,那这个函数永远不会被正确调用,自然不会破坏接口的约定。
内容的提问来源于stack exchange,提问作者谭鹏飞
相关产品推荐
相关产品推荐

