TypeScript的类型推断功能在情况1下可以正常工作,但在另一种情况下会引发错误

问题描述

所以我正在尝试使用TS的类型推断功能:即,当我们不将变量类型指定为数字字符串或布尔值时,而是将其留给TS以便在初始化或赋值时自行解决

不幸的是,它表现得很混乱

案例1->

function func(arg1:number,arg2:string){
console.log(arg1 + arg2);
}

let v ;
v = func;
console.log(typeof v);
v = 8;
console.log(typeof v);

代码工作正常,输出为:函数和数字

但在第2种情况下->

function func(arg1:number,arg2:string){
console.log(arg1 + arg2);

}

let v = func;
console.log(typeof v);
v = 8;
console.log(typeof v);

TS编译器在此处引发错误: 不能将类型'number'分配给类型'((arg1:number,arg2:string)=> void'。

有人可以告诉我我在想什么吗? 〜

解决方法

我的看法是,在第一种情况下,您声明了v,并且在编写代码时会推断出其类型。因此,一开始它没有某种类型。因此,您可以多次更改它。

在第二种情况下,您已经从一开始就将其声明为一个函数。因此,打字稿会认为从现在开始v是一个函数,对它的任何类型更改都将导致错误。