我希望我的实体将某些组件存储在字典中,如下例所示。但我希望components
创建时传递Entity
字典的形状。
entity: {
id: 1,
components: {
position: {
x: 0,
y: 0
},
mass : {
value: 4
},
color: {
value: 'green'
}
}
}
不幸的是,Typescript不允许我将components
的初始值设置为空对象{}
。我收到错误Type {} is not assignable to 'ComponentDictType'.
class Entity<ComponentDictType> {
public id: number
public components: ComponentDictType = {}
}
如何约束ComponentDictType,以便它可以分配给空对象?
答案 0 :(得分:1)
唯一可以将空对象分配给SharedState
的方法是,如果components
的类型与空对象兼容。一种实现方法是让components
保留为完全非可选类型,但将ComponentDictType
用作Partial<ComponentDictType>
属性的类型:
components
(请注意,我同时初始化了这两个属性。建议同时使用--strictNullChecks
和--strictPropertyInitialization
来捕获class Entity<ComponentDictType> {
public id: number = 0; // init here too
public components: Partial<ComponentDictType> = {}; // no error
}
错误,然后再运行。)
现在您可以使用您的类,但是要警告编译器不再认为undefined
的每个属性都必须存在...您必须检查它:
components
希望有所帮助;祝你好运!