当将变量id声明为数字时,为什么在构造函数中为其分配字符串时,下面的代码为什么能正常编译?
interface IComplexType{
id: number;
name: string;
}
class ComplexType implements IComplexType{
id: number;
name: string;
constructor(idArg: number, nameArg: string);
constructor(idArg: string, nameArg: string);
constructor(idArg: any, nameArg: any){
this.id = idArg;
this.name = nameArg;
}
}
window.onload = () =>{
var complexType: ComplexType = new ComplexType("hi","hi");
console.log(complexType.id);
}
谢谢!
简短答案...因为未分配字符串,因此正在分配type变量any
。
this.id = idArg;
该any
类型的装置,该值“可以被视为任何类型”。因此,当编译器询问“我可以分配any
一个number
”时,答案是“是”。
您可以使用联合类型来缩小构造函数中的类型(并消除重载,这始终是一件好事):
class ComplexType implements IComplexType{
id: number;
name: string;
constructor(idArg: string | number, nameArg: string){
this.id = idArg;
this.name = nameArg;
}
}
这样做的另一个好处是,告诉您分配是一个可能的错误,这将迫使您更新签名(解析字符串中的数字,或在提供字符串时执行您想做的任何事情)。
该示例的关键部分是string | number
,表示类型是字符串或数字,比限制更多any
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句