打字稿编译器不工作吗?

Typescript compiler is not working right?

我正在尝试理解打字稿中的函数类型。我在下面写了代码,假设它会抛出一个错误,但它不能正常工作。

function display():void{
     console.log("Function is a type")
}

function displayName(name:string):void{
     console.log("This is my "+name)
}

function returnName(name:string):string{
     return "My name is "+ name
}

let thatsMyName:(naem:string)=>void;
thatsMyName = display

如您所见,我创建了三个函数。我创建了一个名为 thatsMyName 的变量,并为它提供了 returnName 函数的类型签名,但它存储了我给它的任何函数。它假设在编译时抛出错误但它没有抛出。有人可以指出我哪里错了吗?

想法:

关于Amadan的评论,我尝试解释一下我对the above commented答案的理解。我不认为它是 100% 的重复,但答案和问题的重点是一样的。 (如果您想将此问题标记为重复 - 请随意这样做)。

答案:

从您这边看到的行为似乎是由于每个 JavaScript-Code 都是有效的 TypeScript 代码这一事实造成的。作为先决条件,解释了以下情况:

如所回答的链接问题:许多非常常见的 JavaScript-Functions 具有包含 3 个或更多参数的回调。例如 forEach 有一个可以与 (currentValue, index, array) 一起使用的回调。常见的陷阱是只将它与 currentValue 一起使用。所以参数的回调amount/content不相等

从 TypeScript 的角度来看,这是什么意思:每个 JavaScript 带有回调的函数都必须是可选的,而不是强类型的。否则所有 JavaScript 代码都不会在 TypeScript 的支持下执行。

更多信息:

您函数的输出 (=> void | string) 是强类型的。