TypeScript问题:带默认值的isCollapsed属性为undefined
问题分析
核心问题是类型不匹配导致构造函数未执行:
myEntity是EntityModel[]类型数组,但myFunction期望接收EntityVM类型参数- 直接传递
EntityModel实例时,EntityVM的构造函数并未被调用,isCollapsed的默认值false自然不会被初始化,所以该属性最终是undefined
解决方案
1. 手动完成类型转换
调用myFunction前,把EntityModel实例逐个转换成EntityVM实例,触发构造函数的默认值逻辑:
// 将EntityModel数组转换为EntityVM数组 const convertedEntities = myEntity.map(item => new EntityVM(item)); // 按实际需求传递单个实例或数组给函数 myFunction(convertedEntities[0]); // 示例:传递第一个转换后的实例
2. 修正函数参数类型(适配数组场景)
如果myFunction本来就是要处理一组实体,直接修改参数类型为EntityVM[],确保类型匹配:
public myFunction(myEntities: EntityVM[]) { myEntities.forEach(entity => { // 此时entity.isCollapsed会是构造函数设置的默认值false }); }
3. 可选临时方案:为原接口补充属性(不推荐)
如果允许修改EntityModel接口,可以添加可选的isCollapsed属性,但这违背了视图模型(VM)和数据模型(Model)的职责分离原则,仅适合临时场景:
export interface EntityModel { // 原有属性... isCollapsed?: boolean; }
内容的提问来源于stack exchange,提问作者Starrux
相关产品推荐
相关产品推荐

