【发布时间】:2021-12-03 08:25:55
【问题描述】:
在这段代码中
const s = "myKey" as const;
const myF = () => ({
[s]: 0,
});
myF 的类型是function myF(): {[p: string]: number, myKey: number}
返回类型为{[p: string]: number, myKey: number}
如您所见,不需要的 [p: string]: number 在这里泄漏。
如何在没有显式类型注释的情况下使我的返回类型成为预期的 {myKey: number}?
我还不想进入显式注释,因为我得到了一些包含很多字段的类型。
【问题讨论】:
-
您使用的是什么版本的打字稿?当我将您的代码粘贴到typescript playground 时,我看到
myF对于大多数版本的打字稿都有() => { myKey: number }类型 -
你的实际代码比上面的复杂吗?我猜您可能会遇到这样一种情况,即您的实际代码中的
s等效项被输入为string而不是特定的字符串文字类型,这会导致您看到的情况。 -
Typescript Playground 显示了预期的行为。也许问题是我正在检查 IDEA(Ultimate / Webstorm,没关系)类型检查器。也许这确实是 IDEA 问题。
-
> 你的实际代码比上面的更复杂吗?是的,但我将其简化为这个例子。