为什么TypeScript不能强制为类属性声明的类型?

Kev*_*Kev 0 types class typescript

这是一个很大的代码库,所以我只是寻找一般指针.

在一个文件中,函数接受一个参数a:MyClass.

在运行时,typeof a.b产量string.

在VSCode中,我点击F12 b,a.b然后被带到(正确地,由import语句判断)到另一个文件:

export class MyClass {
  ...
  b: string[]; // brought to this line
}
Run Code Online (Sandbox Code Playgroud)

在TypeScript环境中a.b如何成为一个string而不是string[]像类声明所说的那样?我应该寻找什么可能导致这种行为?

Waz*_*ner 5

TypeScript中的类型声明仅是提示性的.因为TypeScript被转换为纯JavaScript,所以它无法保证变量的实际内容.

即使在TypeScript中,在变量中放置不同类型的对象也相当容易:

let myClass = new MyClass();
myClass.b = "I'm a string placed into a string array" as any;
Run Code Online (Sandbox Code Playgroud)

请注意,as any在最后一行的末尾,这将从表达式中删除类型信息,并允许将其放入任何类型的变量或参数中.