【发布时间】:2019-07-16 10:50:13
【问题描述】:
有一个模型可能处于错误状态,我们可以检查错误为model.getErrors(),错误是带有某种类型的键keyof D 和一个特殊键base 的映射。
为什么这似乎是有效的代码无法编译? TypeScript Playground
export type Errors<D> = {
readonly [K in (keyof D | 'base')]?: string[]
}
class Model<D> {
getErrors(): Errors<D> {
return { base: ['some base error'] }
}
}
【问题讨论】:
-
我认为你需要一个类型断言。 Typescript 在处理未解析的泛型方面受到限制。尽管在这种情况下,对象字面量可分配给类型,但 typescript 不会尝试证明这一点,并且在处理具有未解析泛型的映射或条件类型时只会发出错误。
-
这对我来说实际上看起来像是一个 TypeScript 错误。接受空对象,语言服务建议添加
{ base: string[] },但一旦完成,就会引发错误。这里有些不一致。可能值得向github.com/Microsoft/TypeScript/issues 提交问题。 -
对于来自 Google 的任何人,这确实是一个错误,并且已准备好修复github.com/Microsoft/TypeScript/pull/30112
标签: typescript