gpt4 book ai didi

javascript - 即使参数的类型错误,TypeScript 也不会出错

转载 作者:行者123 更新时间:2023-12-03 10:02:13 25 4
gpt4 key购买 nike

我有一个将字典作为第一个参数的函数。这个字典有字符串作为键,函数作为值。问题是,如果字典中的函数签名错误,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 .我有两个问题:
  • 为什么我没有收到任何错误?
  • 我是否遗漏了一些会导致出现此错误的编译标志?

  • 任何见解将不胜感激。谢谢!

    最佳答案

    没有问题,因为 (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

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

    有关功能可分配性的更多详细信息 - Comparing two functions .还有关于 TypeScript 类型行为和关系的更多细节 - types assignability .

    关于javascript - 即使参数的类型错误,TypeScript 也不会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59141441/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com