【问题标题】:Why property types won't compile?为什么属性类型不会编译?
【发布时间】: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


【解决方案1】:

an error 应该在下一版本的 TypeScript 中修复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    相关资源
    最近更新 更多