我有下面的代码
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.baz
或Conflict.bar.baz
。
我的PhpStorm是2022.2.4,没有特殊的插件,只是捆绑了TSLint(222.4459.28),TypeScript 4.8.3
这是打字的问题吗?真实的的类型与显式的类型有什么不同吗?或者只是PhpStom的问题?
这是一个我正在尝试构建的更大的东西的精简版本。我已经尝试了很多东西,这是我可以追踪到的MVE。我只是想不出为什么这两个不一样对待的任何原因?
1条答案
按热度按时间o8x7eapl1#
这是PhpStorm的问题,它不理解
Awaited<T>
类型。请投票支持WEB-53046以提高其优先级,并获得有关其任何进展的通知