🔎 搜索词
TS2416
🕗 版本与回归信息
- 这是我尝试的每个版本中的行为,我查阅了关于方法参数协变的FAQ条目
⏯ Playground链接
https://www.typescriptlang.org/play/?ts=5.5.3#code/JYOwLgpgTgZghgYwgAgKoB4AqBGANMzAJgD5kBvAWAChlbkAHQgLgMIG5kB6T5KCAWwD2AN1ABzZGAAWwAM7JBUXgJHiC2BnChx+yGFEG7pKUJFiIUMYAA8I848mgGo1AL7Vqp6PCTIAkgBigoJYpJQ0dJCyYOh+RPgACo7WkCAAJvIYmPhxJMQAFGDM-vEMLAkAlCzCgsBpbNR0XDy0AHrICIb0wAA20MiyAK5iYnZg9oLIg7IoAAa5yakZJYSzyFLQEPgA7jIIUsj8cADWdsggkzMgM24eVAg9cLLyQSGYpMD89H38EODygWCoXIjUiYywhESiz+yyy+CIxAKRRYpXo5SqyBqdRBEVo3CaBMJROJyHaszgIAAnmsNnw9DYzg4nIpQXieO0EgZ6NAwJTkAByKJgfnIUCSSncgWvUIiuTnQRgZBPWTAMQgOAAIz6kkmDlkOhQ9C5PL5Yo1TxQvMl-MBb2I-IAdKzmrRMBKUPyIVCICkYZksPC8oViqj0cgALykLFpWXyC6K5Wq9Vay2690C2KlJI+pb+7IrRHBli5fBo5CVCNR2oxp24l10N3c+SCGCabS-Mzyfn0EUUtICntKumgTpfOBgYAp2tNfEExsehKx+UJ55JzXasBp61wguO52zwnzgU73L20VxhVK1dq9ep8XbgO7h0EbaTNLAGAwTbge9nbbAaRJBkOMDWSOQwHwDVBkVYw+S0FBBhAPhHkgNJpzoA8iSPG0iCXeMrxVG8Ux1X8BVyR0XzfD8vz4H8rT-ACDmkOV1V+MDokg6CgIgOC6UQ5DxwgNDnXcKhXCAA
3条答案
按热度按时间bbmckpt71#
我怀疑这个错误是由于编译器在内部检查了两种类型
IFoo<T>
和IFoo<T>
,其中T
来自Foo<T>
,但这在错误信息中产生了看似相同类型但实际上不同的困惑,以及错误的修复建议。我想,如果你在实现中添加
t2: any
或者从IFoo<T>
中移除T
,它会通过,但否则它会变成。修改接口
IFoo
以声明test
为test<IT2 extends any, ...>(...)
可以修复这个错误。pepwfjgg2#
你可以选择从你的
U
接口中移除未使用的类型参数T1
,你提到这样做可以修复错误。未使用的类型参数经常会导致奇怪的行为,不应该使用。https://github.com/microsoft/TypeScript/wiki/FAQ#why-is-astring-assignable-to-anumber-for-interface-at--
一般来说,你应该永远不要有未使用的类型参数。类型将具有意外的兼容性(如上所示),并且在函数调用中也无法正确进行泛型类型推断。
krcsximq3#
@MartinJohns,它并没有被废弃,这个例子只是被简化了。