Angular 为什么有棱角';s激活的“类型”路由参数;有什么;?

Angular 为什么有棱角';s激活的“类型”路由参数;有什么;?,angular,angular2-routing,angular-routing,angular-router,Angular,Angular2 Routing,Angular Routing,Angular Router,出于好奇,我尝试将ActivatedRoute的参数指定给定义为数字的变量: public id: number; constructor(public activatedRoute: ActivatedRouter) {} public ngOnInit() { this.activatedRoute.params.take(1).subscribe((params) => { this.id = params['id']; // I was expectin

出于好奇,我尝试将
ActivatedRoute
的参数指定给定义为数字的变量:

public id: number;

constructor(public activatedRoute: ActivatedRouter) {}

public ngOnInit() {
    this.activatedRoute.params.take(1).subscribe((params) => {
        this.id = params['id']; // I was expecting to see a warning here
    }
}
…它在我的IDE和tslint中没有任何警告就通过了。因此我深入研究它,发现它发出声明()以包含
任何
元素:

export type Params = {
  [key: string]: any
};

问题是为什么?AFAIK所有参数始终是字符串。有没有办法说Angular的一些参数应该是
数字
数组
,它会对其进行解析?

请记住Angular不会进行参数验证,任何类型警告都是在从TypeScript到JavaScript的编译时间进行的。在运行时,
params['id']
很可能是一个字符串。因此,
任何
都是有效的,因为您不知道它是什么。您应该
this.id=parseInt(params['id'])如果你想确保一个数字值。是的,我知道,我的意思是IDE和tslint中没有警告-我现在在问题中指定了它。。。我不是问我该怎么做,或者为什么它会过去,因为这是显而易见的。我想知道为什么会做出这样的决定——这是有原因的吗?或者只是一些懒惰的开发人员使用了已经存在的类型?我认为两者都有一点。您会发现
ElementRef
将本机DOM元素定义为
any
,而不是JavaScript
元素
类型,甚至
节点
。原因之一是Angular可以在没有浏览器的环境中运行(如NodeJS)。所以我认为一般的想法是,任何来自Angular领域之外的东西都有一个
any
类型。由于团队无法保证将是什么类型。那么,路线路径中还会有什么其他类型?我不知道。。。。只需字符串:)