TypeScript中向含方法的接口数组添加对象报错求助
TypeScript数组添加Videos类型对象报错的解决方案
你遇到的问题核心是:直接用对象字面量添加到Videos[]数组时,这个对象只包含了接口定义的属性,缺少接口要求的pressLike和pressDislike方法,TypeScript的类型检查会严格验证接口的所有成员(包括方法)是否都存在,所以会抛出错误。
下面是几种可行的解决办法:
方法1:用Video类创建实例(推荐)
既然你已经写了实现Videos接口的Video类,直接通过new Video()创建实例加入数组即可,实例会自动继承类里定义的两个方法:
var videoArr: Videos[] = [ new Video("Book 1 Water", "Learn the water bending", 0) ]; // 后续添加新视频也用同样方式: videoArr.push(new Video("Book 2 Earth", "Learn earth bending", 10));
方法2:给对象字面量手动补全方法
如果不想依赖类,也可以直接在对象字面量里实现接口要求的两个方法:
var videoArr: Videos[] = [ { title: "Book 1 Water", description: "Learn the water bending", like: 0, pressLike() { if (this.like < 0) { this.like = 0; } else { this.like++; } }, pressDislike() { if (this.like < 0) { this.like = 0; } else { this.like--; } } } ];
不过这种方式会重复写方法逻辑,不如用类来复用代码。
方法3:拆分接口(按需选择)
如果想把视频的数据属性和操作方法分离,可以拆分接口:
// 定义只包含数据的接口 interface VideoData { title: string; description: string; like: number; } // 继承数据接口并添加方法 interface Videos extends VideoData { pressLike(): void; pressDislike(): void; } // Video类实现不变,添加实例到Videos数组的方式和方法1一致
内容的提问来源于stack exchange,提问作者gadss
相关产品推荐
相关产品推荐

