问题
- var A: { [key: string]: string }
- var B: { foo: string } = { foo: 'hahah' }
- A = B // ok
- var C: (state: { [key: string]: string; }) => void
- var D = (state: { foo: string }) => {}
- C = D // throw error
- {
- [key: string]: string }
复制代码
由于 A = B 没问题,我认为 { foo: string } 与
但是 C = D 抛出一个错误,上面写着 Types of parameters 'state'和'状态'不兼容。属性 'foo'缺少类型 '{ [key: string]: string; }'但在 '{ foo: string; 类型中是必需的}'.
请告诉我为什么?
回答
在我们开始之前,让我们修复返回类型 C - 它应该是 void (而不是 {} ),因为 D 不返回任何东西。
此错误现在仅在启用编译器选项时发生。
从以下几个方面来看:
函数 --strictFunctionTypes(在其参数类型声明中)声明它可以处理具有任何键的对象。
功能 C
- D
- - requires the parameter to have at least
- foo key.
复制代码- var C: (state: { [key: string]: string; }) => void
- var D = (state: { foo: string }) => {
- console.log(state.foo.toUpperCase())
- }
- C = D // error with strictFunctionTypes
- C({}) // will blow up at runtime
复制代码
|