为什么直接类型转换在Typescript中不起作用

时间:2018-08-21 05:46:49

标签: typescript

我有一个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却不起作用?

1 个答案:

答案 0 :(得分:0)

TypeScript中的“类型转换”与其他语言不同,实际上称为“类型声明”。

来自the documentation

  

类型断言是一种告诉编译器“相信我,我知道我在做什么”的方法。类型断言就像其他语言中的类型转换一样,但是不对数据进行任何特殊的检查或重组< / strong>。它对运行时间没有影响,仅由编译器使用。 TypeScript假定您(程序员)已经执行了所需的任何特殊检查。

因此,完全可以预期,您必须手动转换数据(在您的情况下为JSON.parse())。