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