首页 > 解决方案 > TS2551:TS:2339 向现有对象动态添加键/值的问题(TypeScript)

问题描述

我有创建某些类的新实例并通过键将它们附加到this.data属性的类。它只通过SuperClass.

但是,如果我想添加到this.datausingdynamicAddToData方法,SuperClass那么 TypeScript 会告诉我这个属性不存在。

我猜泛型可以解决我的问题,但可能不使用泛型?

declare type SuperClassData<M> = {
  [K in keyof M]: M[K]
}

declare type SuperClassConstructorObject<M> = {
  [K in keyof M]: (new () => M[K])
}

class SuperClass<MP> {
  public data: SuperClassData<MP> = {} as SuperClassData<MP>

  constructor (obj: SuperClassConstructorObject<MP>) {
    for (const key of Object.keys(obj)) {
      const Class = obj[key]
      this.data[key] = new Class()
    }
  }

  public dynamicAddToData (key: string, Class: any): void {
    this.data[key] = new Class()
  }
}

class Foo {
  public foo = () => 'foo'
}

class Bar {
  public bar = () => 'bar'
}

const superClass = new SuperClass({ foo: Foo, bar: Bar })

superClass.dynamicAddToData('baz', Bar)

superClass.data.bar.bar() // bar
superClass.data.baz.bar()

在此处输入图像描述 类型 'SuperClassData<{ foo: Foo; 上不存在属性 'baz' 酒吧:酒吧;}>'.ts(2339)

会很高兴每个答案

标签: typescript

解决方案


推荐阅读