我有一个response['additional-info']
类型的字段string
。其结构为json
。
"{"supported-tags":[{"s1":"someS1","s2":"someS2","s3":"someS3"}]}"
我想将其转换为B
类型。
B
是
export class C{
constructor(
public s1:string,
public s2:string,
public s3:string
){}
}
export class B{
'supported-tags':Array<C>;
constructor(
supportedTags:Array<C>
){
this['supported-tags'] = supportedTags;
}
}
我注意到直接类型转换不起作用
let b:B = <B>response['additional-info'] //doesn't work
let b:B = response['additional-info'] as B //doesn't work
但是
let b:B = <B><any>response['additional-info'] //works
当然可行
let b:B = JSON.parse(response['additional-info']) // work
我能理解最后两个的工作原理,但为什么1st 2却不起作用?
答案 0 :(得分:0)
TypeScript中的“类型转换”与其他语言不同,实际上称为“类型声明”。
类型断言是一种告诉编译器“相信我,我知道我在做什么”的方法。类型断言就像其他语言中的类型转换一样,但是不对数据进行任何特殊的检查或重组< / strong>。它对运行时间没有影响,仅由编译器使用。 TypeScript假定您(程序员)已经执行了所需的任何特殊检查。
因此,完全可以预期,您必须手动转换数据(在您的情况下为JSON.parse()
)。