[英]How to cast a plain object as a instance of another type in JavaScript
[英]Cast object type to another type
我有一个将range
类型设置为IntervalRange
export class Test {range: IntervalRange;}
然后在父类中,我初始化值:
export class TestInitializer {
Create(){
return <Test>{
range: IntervalRange.initialize(Database.GetByName('MONTH').id};
}
InitializeElement() {
let test = <Test>JSON.parse(JSON.stringify(configuration));
return test;
}
然后在其他组件中,我将其用作:
@Input() range: IntervalRange;
但是在函数range.getRange();
我得到: ERROR TypeError: this.range.getRange is not a function
这是为什么? 它说range
是一个对象,尽管应该是IntervalRange
。
我尝试编写as IntervalRange
, <IntervalRange> range
无效。 如何解决?
更新: let type = typeof(this.range)
; 打印"object"
方法:
ngOnChanges() {
if (this.range) {
let type = typeof(this.range);
let ddd = this.range.getRange(); //<----- this is where I get error
}
类型转换仅强制转换类型。 Typescript在运行时不存在。 因此,如果JSON.parse
没有返回正确的Test
实例(由于方法不会序列化,则不会返回),它将在运行时失败。 您可能不希望进行类型转换,而是要构建一个Test实例,然后将序列化的数据加载到其中。
TypeScript“广播”( <A>tmp
或tmp as A
):
any
则不可用。 当数据来自不安全/外部来源(例如JSON.parse()或WebAPI调用)时,它是DTO (数据传输对象) ,具有any
类型。 TypeScript“ cast”也是不安全的。
为了确保强制转换操作,可以使用从DTO到“域模型”类的映射功能。 关键是返回真实的类实例。
Object.assign(new IntervalRange(), this.range)
(您在注释中提到的)满足了这一点。 this.a = range.a; this.b = range.b; ...)
this.a = range.a; this.b = range.b; ...)
this.a = range.a; this.b = range.b; ...)
。 这两个选项最好都包含在函数中:类构造函数,类中的静态工厂方法,同一模块中的外部函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.