TypeScript TS2416 非逻辑修复建议(可能为误报?)在实现接口的通用类中逐字逐句地编写 翻译结果:TS2416是一个非逻辑修复建议,它可能出现在一个实现了接口的通用类中,并且是逐字逐句地编写的,

5cg8jx4n  于 9个月前  发布在  TypeScript
关注(0)|答案(3)|浏览(86)

🔎 搜索词

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

bbmckpt7

bbmckpt71#

我怀疑这个错误是由于编译器在内部检查了两种类型 IFoo<T>IFoo<T>,其中 T 来自 Foo<T>,但这在错误信息中产生了看似相同类型但实际上不同的困惑,以及错误的修复建议。
我想,如果你在实现中添加 t2: any 或者从 IFoo<T> 中移除 T,它会通过,但否则它会变成

  1. class Foo<T> implements IFoo<bound to T> {
  2. test<T2, P extends U<bound to T, T2>>(t2: T2, p: P): void
  3. // => compared to IFoo<unbound generic T>.test<IT2, P extends U<unbound generic T, IT2>>(t2: IT2, p: P)
  4. // which is false and produces `IT2 extends IT2` suggestion
  5. }

。修改接口 IFoo 以声明 testtest<IT2 extends any, ...>(...) 可以修复这个错误。

pepwfjgg

pepwfjgg2#

你可以选择从你的 U 接口中移除未使用的类型参数 T1,你提到这样做可以修复错误。未使用的类型参数经常会导致奇怪的行为,不应该使用。
https://github.com/microsoft/TypeScript/wiki/FAQ#why-is-astring-assignable-to-anumber-for-interface-at--
一般来说,你应该永远不要有未使用的类型参数。类型将具有意外的兼容性(如上所示),并且在函数调用中也无法正确进行泛型类型推断。

krcsximq

krcsximq3#

@MartinJohns,它并没有被废弃,这个例子只是被简化了。

相关问题