typescript - TS2551:TS:2339 向现有对象动态添加键/值的问题(TypeScript)
问题描述
我有创建某些类的新实例并通过键将它们附加到this.data
属性的类。它只通过SuperClass
.
但是,如果我想添加到this.data
usingdynamicAddToData
方法,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)
会很高兴每个答案
解决方案
推荐阅读
- ios - definePresentationContext 应设置为 YES,但在与 UISearchController 结合使用时会中断导航
- c# - 检索自定义属性中的属性值
- azure - 如何在我只能通过 Azure 上的串行控制台访问的 Debian 9 VM 上获取 FASTA 文件
- ansible - 带有 bash 脚本的 Ansible 动态清单
- angular - Angular 在构建后将 'bearer' 字符串添加到身份验证标头
- javascript - 在具有自定义 auth-storage 的服务器上使用 AWS Amplify Auth
- android-layout - Android,如何更改 18.5:9,16:9 的启动画面
- javascript - 如何使用 eCharts 显示每日股票图表结合季度收入数据图表
- node.js - crypto-js 模块已导入,但未按预期工作
- mysql - Golang 中的 MySQL 空值