Typescript 没有我期望的类型警告
我正在声明一个对象,如下所示:Typescript 没有我期望的类型警告,typescript,Typescript,我正在声明一个对象,如下所示: const x: { str: string, num: number } = { str: str, num: not_a_num }; 要点是:not_a_num不是一个数字,而是一个字符串。我希望编译器抛出一个错误;相反,我得到了一个具有两个字符串属性的对象 另外,我声明了一个函数: store(array: Array<{ str: string, num: number }>): Promise<any> {
const x: { str: string, num: number } = {
str: str,
num: not_a_num
};
要点是:not_a_num不是一个数字,而是一个字符串。我希望编译器抛出一个错误;相反,我得到了一个具有两个字符串属性的对象
另外,我声明了一个函数:
store(array: Array<{ str: string, num: number }>): Promise<any> { //... }
store(数组:array):Promise{/…}
在其中,当我将包含对象x的数组作为参数传递时,typeof(array[0].num)解析为“string”
我的问题是:为什么我没有从中得到任何编译器警告/错误?如果我试图传递一些我显然不想传递的东西(正如我明确指出的,必须传递一个数字),而没有收到警告,那么做类型注释有什么意义呢?
我觉得我在这里有一些根本的误解
你好,谢谢 问题是,
not\u a\u num
被键入为any
。并且any
与任何其他类型兼容
let str = "";
let not_a_num:any = "";
const xWithAny: { str: string, num: any } = {
str: str,
num: not_a_num
};
const x: { str: string, num: number } = xx; // valid
类型兼容性是根据每个组件的兼容性确定的,因此在上述代码中,xWithAny
与x
兼容,因为str
属性具有相同的类型,num:any
可以分配给num:number
问题是在运行时,not___num
可以有任何有效值(因为它是any
类型),因此num
可能最终成为一个字符串
一般来说,你应该避免使用任何
any
,如果你使用它,你应该有意识地决定将事物键入any
。typescript编译器可以通过启用noImplicitAny
如何声明不是一个num
?下面的代码产生了一个错误:嗯,你是对的。Not_a_num声明为:this.formGroup[index].controls.qty.value,它是返回字符串的角度语句。也许是角度的问题?不过,第二个问题仍然适用:为什么函数接受包含字符串的对象?(简化:它是angular formcontrol的值(这是一个属性)。___num可能不是any
类型,这意味着它可以分配给任何对象,因此类型为{str:string,num:any}的对象
可分配给您的类型哦,哇,好吧,这似乎是合法的。你能推荐一个能让我对此有更深理解的来源吗?我不明白的是,为什么我可以明确地说我期待一个数字,但仍然收到一个字符串,因为外面有人决定传递“any”,然后解析为一个字符串。这不正是打字的重点吗?