2017-06-14 82 views
2

这种事情现在发生在我身上多次,所以我想问我是否做错了什么或者Typescript/Angular真的不这样做。根据我的理解,最大的优势之一是变量,参数等的类型声明(接口)。Typescript/Angular Type声明没用?

今天,我有这个问题:

一个简单的开关按钮:

<p-selectButton [options]="posLayouts" (onChange)="handle($event)" [(ngModel)]="pageSize"></p-selectButton> 

的变量:

pageSize: number; 

    posLayouts: SelectItem[]; 

    //On mistake I setted the value here as a string 
    this.posLayouts.push({label:'1 Woche', value: '1'}); 
    this.posLayouts.push({label:'3 Wochen', value: '3'}); 

在更改功能我仅仅是调用另一个函数的值超出posLayouts。

handle(e){getPager(this.pageSize)} 
    getPager(pageSize: number = 3){ 
    let totalPages: number; 
    totalPages = 23 + pageSize -1 
    console.log(totalPages) 
} 

console.log()返回比eiter 230或232而不是所需的23或25.它将pageSize作为字符串。这种类型的错误很难找到,这次我有运气,因为它很容易找到... 没有Angular或tslint或我的编辑器告诉我,我不能在一个数字变量中存储字符串。

为了我的理解,typescript应该检查兼容性,还是Angular以某种方式禁用了这里的监听?或者我做错了什么?

回答

1

TypeScript类型仅用于开发工具(linter,autocompletion,...)。
对于运行时,所有代码都转换为JavaScript,并且没有可用的类型信息。
因此,对于用户输入或代码之外的其他数据源,您需要确保自己的数据符合您期望的类型。

+0

恩,这不是我想听的,但谢谢。所以用户输入仍然需要由我自己进行类型检查。 – Doomenik

+0

是的,类型仅用于开发和构建过程(更高效的树状抖动)。如果他们会在生成的JS代码中随处进行类型检查,那么性能影响会太高。 –