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”,然后解析为一个字符串。这不正是打字的重点吗?