如何访问数组元素的类方法?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
相关产品推荐
相关产品推荐

