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

如何访问数组元素的类方法?TypeScript强转类型后调用类方法报错问题

错误原因
  • 你使用的<Input[]>属于TypeScript的编译时类型断言,仅用于通过类型校验,不会在运行时做真实的类型转换。你通过this.get('inputs')获取到的只是普通JSON对象,仅携带属性,没有绑定Input类的原型方法,自然无法调用QuoteRef。
  • TypeScript采用擦除式类型系统,编译为JavaScript后所有类型标注都会被移除,不存在运行时的自动类型转换逻辑。你将普通对象强转为Input类型只是规避了编译报错,运行时对象的原型链上没有Input类的任何方法,所以会抛出TypeError: a.QuoteRef is not a function的错误。
解决方案说明

你后续新增的new Input()实例化逻辑是正确的:通过类构造函数将普通对象转换为真实的Input类实例后,每个实例都会继承Input原型上的所有方法,可正常调用QuoteRef。
如果需要高频使用该数组的类方法,建议在获取数据后统一做实例转换,避免每次调用时重复实例化:

private loadInputs() : Input[] {
    const rawInputs = <Array<{_Project: string, _Line: string}>>this.get('inputs') || [];
    // 统一转换为Input实例后再进行后续操作
    const inputs = rawInputs.map(item => new Input(item));
    inputs.sort((a,b) => a.QuoteRef().localeCompare(b.QuoteRef()))
    return inputs;
}

内容的提问来源于stack exchange,提问作者Sven Thielen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:06:08