TypeScript 忽略类构造函数中的错误会导致方法使用错误被忽略

unguejic  于 4个月前  发布在  TypeScript
关注(0)|答案(3)|浏览(44)

TypeScript版本: 3.5.3
搜索词:

ts-ignore 在类构造函数中
类方法参数使用无错误

代码

class Foo {
  bar: string
  constructor(bar: string) {
    this.bar = bar
  }

  baz(buzz: number) {
    return buzz + 1
  }
}

// @ts-ignore
const instance = new Foo()
instance.baz('buzz')

预期行为:

instance.baz('buzz') 的调用应报告该参数应该是一个 number 而不是一个 string

实际行为:

那一行没有报错。
如果我在上面的那一行修复了 ts-ignore,那么它将正确地报告错误。

** playground链接:**

http://www.typescriptlang.org/play/?ts=3.8.0-dev.20200116#code/MYGwhgzhAEBiD29oG8BQ1oCMwCcBc0EALjgJYB2A5utMPOcTgK7BHw4AU2+hJFlAShQ0MRABakIAOm7QAvFlw0AvqhrYAXlyYaNBckwC2mAKY4haDBhwmiTHOSw6N0ANTQAjCtSrUAej9oAAEiCABaUkpydhNUOgYiaApiMHJgE3lochMAdzhEDgFUZKJU9JkwLQByTGcqgSA

相关问题:

通过Google或这里找不到任何相关问题。

lb3vh1jj

lb3vh1jj1#

这让人困惑,因为从仅仅悬停在 instance 上看,类型是 Foo ;然而,我认为发生的事情是我们有不同的类型检查器模式,而 new Foo() 产生的每种类型检查器都不同。
new Foo() 在我们的产生错误的类型检查器中返回内部 错误 类型,它的作用类似于 any ,因为它试图避免在后续操作中产生级联错误。然而,像快速信息和自动完成这样的操作完全依赖于一个更宽松的类型检查器,该类型检查器尝试以最大努力的方式获取操作的结果,并产生类型 Foo 。然而,这个更宽松的检查器并不是产生错误的相同类型检查器示例,所以在后续操作中不会出现错误。
@sheetalkamat@weswigham 这样听起来对吗?

70gysomp

70gysomp2#

这正是问题所在。请参阅 #28564#28950 以获取可能的修复方法。

gkn4icbw

gkn4icbw3#

感谢您的回复。目前,我将专注于修复构造函数中的类型错误。

相关问题