52ky 发表于 2022-5-4 15:16:48

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]
查看完整版本: TypeScript 函数类型兼容性