You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 22:54:58