找回密码
 立即注册
stringampfoo类型 | 软件设计/软件工程 2022-05-04 227 0star收藏 版权: . 保留作者信息 . 禁止商业使用 . 禁止修改作品
问题
  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() 的等效函数?