TypeScript和PhpStorm中等待函数返回类型的类型推断问题

6ljaweal  于 2022-12-05  发布在  TypeScript
关注(0)|答案(1)|浏览(107)

我有下面的代码

class Foo {
   bar: {
      baz: number
   }
}

class Conflict {
   bar: {
      baz: string
   }
}

function foo() {
   return Promise.resolve(new Foo())
}

async function problem() {
   const auto = await foo()
   const typed: Awaited<ReturnType<typeof foo>> = await foo()
   typed.bar.baz
   auto.bar.baz
}

你可以看到我定义了两个结构几乎相同的类,重要的是它们有相同名称的属性。然后a定义了一个函数foo,它返回解析为Foo示例的Promise。然后我用await调用它两次,一次我让返回的类型被自动推导出来,一旦我显式地将类型设置为Awaited<ReturnType<typeof foo>>,它应该就是await foo()返回的值。
我的问题是PhpStorm对待这两个不同。

  • 如果我想跳到auto.bar.baz的定义,它会正确地把我带到Foo.bar.baz的定义。
  • 但是当我想跳到typed.bar.baz的定义时,它不知道跳到哪里,并提供了一个跳到名称为baz的所有已知方法的选择,在本例中是Foo.bar.bazConflict.bar.baz

我的PhpStorm是2022.2.4,没有特殊的插件,只是捆绑了TSLint(222.4459.28),TypeScript 4.8.3
这是打字的问题吗?真实的的类型与显式的类型有什么不同吗?或者只是PhpStom的问题?
这是一个我正在尝试构建的更大的东西的精简版本。我已经尝试了很多东西,这是我可以追踪到的MVE。我只是想不出为什么这两个不一样对待的任何原因?

o8x7eapl

o8x7eapl1#

这是PhpStorm的问题,它不理解Awaited<T>类型。请投票支持WEB-53046以提高其优先级,并获得有关其任何进展的通知

相关问题