[软件设计/软件工程] TypeScript 函数类型兼容性

[复制链接]
发表于 2022-5-4 15:16:48
问题
  1. var A: { [key: string]: string }
  2. var B: { foo: string } = { foo: 'hahah' }

  3. A = B // ok

  4. var C: (state: { [key: string]: string; }) => void
  5. var D = (state: { foo: string }) => {}

  6. C = D // throw error

  7. {
  8. [key: string]: string }
复制代码

由于 A = B 没问题,我认为 { foo: string } 与

但是 C = D 抛出一个错误,上面写着 Types of parameters 'state'和'状态'不兼容。属性 'foo'缺少类型 '{ [key: string]: string; }'但在 '{ foo: string; 类型中是必需的}'.

请告诉我为什么?

回答
在我们开始之前,让我们修复返回类型 C - 它应该是 void (而不是 {} ),因为 D 不返回任何东西。

此错误现在仅在启用编译器选项时发生。

从以下几个方面来看:

函数 --strictFunctionTypes(在其参数类型声明中)声明它可以处理具有任何键的对象。

功能 C
  1. D
  2. - requires the parameter to have at least
  3. foo key.
复制代码
  1. var C: (state: { [key: string]: string; }) => void
  2. var D = (state: { foo: string }) => {
  3.     console.log(state.foo.toUpperCase())
  4. }

  5. C = D // error with strictFunctionTypes

  6. C({}) // will blow up at runtime
复制代码
  1. (x: T) => void

  2. T
复制代码






上一篇:使用 pip 安装 pandas 时出错
下一篇:电子表格“=QUERY” join() 的等效函数?

使用道具 举报

Archiver|手机版|小黑屋|吾爱开源 |网站地图

Copyright 2011 - 2012 Lnqq.NET.All Rights Reserved( ICP备案粤ICP备14042591号-1粤ICP14042591号 )

关于本站 - 版权申明 - 侵删联系 - Ln Studio! - 广告联系

本站资源来自互联网,仅供用户测试使用,相关版权归原作者所有

快速回复 返回顶部 返回列表