Typescript:为什么我能够将字符串值分配给我声明的(接口)数字对象参数表

Typescript:为什么我能够将字符串值分配给我声明的(接口)数字对象参数表,typescript,Typescript,我声明了一个接口: export interface DateArray { year : number; } 我在我的组件中声明了一个新变量,如下所示: private dateArray: DateArray = { year: null }; 在我的组件中,我为dateArray.year赋值,如下所示: this.dateArray.year = this.megaData[0][3]; 现在我不明白的是,无论this.megaData[0][3]的值是多少(

我声明了一个接口:

export interface DateArray {
    year    : number;
}
我在我的组件中声明了一个新变量,如下所示:

private dateArray: DateArray = {
    year: null
};
在我的组件中,我为dateArray.year赋值,如下所示:

this.dateArray.year = this.megaData[0][3];
现在我不明白的是,无论
this.megaData[0][3]
的值是多少(字符串、数字、数组),它都会被分配到
this.dateArray.year
,而没有任何问题

当我这样做时:

 this.dateArray.year = "A"
我收到一个错误“无法将字符串分配给数字”,但当
this.megaData[0][3]
的值为
“A”
时,我没有收到错误,并且输出:

        this.dateArray.year = this.megaData[0][3];
        console.log("this.dateArray.year);
只是
A

this.megaData
目前只是定义为
,这可能是问题所在吗

this.megaData
目前只是定义为
,这可能是问题所在吗

正确为
any
意味着它也可以是或包含一个数字(声明的属性类型
year
),因此分配不会产生类型不匹配错误

this.megaData
目前只是定义为
,这可能是问题所在吗


正确,因为
any
意味着它也可能是或包含一个数字(声明的属性类型
year
),因此分配不会产生类型不匹配错误。

此.megaData只是暂时定义的,这可能是问题吗?
正是。。。将this.megaData声明为数字[[]]
this.megaData只是暂时定义为,这可能是问题所在吗?
正是。。。将this.megaData声明为数字[[]],这样TS将只根据先前声明的值,而不重新检查分配给变量的每个值以查看其是否相关?也就是说,它只传递“类型”,而不是每次传递值时都计算出新的类型。嗯,那对我来说是一种非常不同的看待它的方式。@AlfaBravo-正确,那将是运行时检查,它不能由transpiler强制执行。这就是静态类型系统的全部思想。Javascript可以动态更改变量类型,但这是运行时错误的主要原因。感谢善意的解释。:)所以TS只会根据之前声明的值,而不会重新检查分配给变量的每个值,看看它是否相关?也就是说,它只传递“类型”,而不是每次传递值时都计算出新的类型。嗯,那对我来说是一种非常不同的看待它的方式。@AlfaBravo-正确,那将是运行时检查,它不能由transpiler强制执行。这就是静态类型系统的全部思想。Javascript可以动态更改变量类型,但这是运行时错误的主要原因。感谢善意的解释。:)