即使参数类型错误,TypeScript 也声称没有错误

TypeScript claims no error even if parameter has the wrong type

我有一个将字典作为第一个参数的函数。该字典以字符串作为键,以函数作为值。问题是,如果字典中的函数签名错误,TypeScript 不会抱怨!

一段代码值1000字。这是我的 main.ts:

interface MyMap {
    [key: string]: (x: number) => void;
}

function f(map: MyMap, key: string, x: number) : void{
    map.hasOwnProperty(key) ? map[key](x) : console.log(x)
}

const stupidMap: MyMap = {
    'square': (x) => {
        console.log(x*x);

        return x*x; // This function should return void!!
    },
    'double': (x) => {
        console.log(x+x);
    }
}

f(stupidMap, 'square', 5) // Prints 25
f(stupidMap, 'double', 5) // Prints 10

我用tsc main.ts编译它,我没有得到任何错误。 tsc --version 打印 Version 3.7.2。我有两个问题:

  1. 为什么我没有收到任何错误?
  2. 我是否遗漏了一些会导致出现此错误的编译标志?

如有任何见解,我们将不胜感激。谢谢!

没有问题,因为 (x: number) => void 可分配给 (x: number) => number。这是一个证明:

type F = (x: number) => void
type Z = (x: number) => number

type ZextendsF = Z extends F ? true : false // evaluate to true 

这个事实对于程序流程来说完全没问题。如果您的界面说 - 我需要一个不 return 的函数,那么如果我传递一个 return 东西的函数,它完全没问题,因为我永远不会使用这个 return 数据。它是类型安全的,无需担心。

有关功能可分配性的更多详细信息 - Comparing two functions. Also more details about TypeScript types behavior and relation -