在typescript中,函数类型优先于参数类型吗?
我正在尝试键入redux操作创建者:在typescript中,函数类型优先于参数类型吗?,typescript,Typescript,我正在尝试键入redux操作创建者: const DO\u SOMETHING='DO\u SOMETHING' 接口DoSomethingAction扩展了操作{ 有效载荷:编号 } const doSomething:ActionCreator=(n:number)=>({ 类型:做点什么, 有效载荷:n, }) 我原以为用doSomething('why')调用此函数会失败,但事实并非如此 据我所知,这是因为redux打字有: interface ActionCreator)类型注释始终
const DO\u SOMETHING='DO\u SOMETHING'
接口DoSomethingAction扩展了操作{
有效载荷:编号
}
const doSomething:ActionCreator=(n:number)=>({
类型:做点什么,
有效载荷:n,
})
我原以为用doSomething('why')
调用此函数会失败,但事实并非如此
据我所知,这是因为redux打字有:
interface ActionCreator)类型注释始终优先于可从用于分配变量或常量的表达式推断的类型。如果您编写注释,则会对表达式进行类型检查,如果您不编写类型注释,则会使用表达式推断变量或常量的类型
功能类型在这方面并不特殊;考虑这种情况:
const-foo:any=“你好”;
功能条(x:number):void{}
酒吧(富);;
由于类型注释,foo
的类型是any
,而不是string
的类型是因为初始化器。因此,bar
可以用foo
调用,因为任何
都可以分配给数字
。同样,在您的代码中,doSomething
的类型将…args:any[]
作为其参数,这是因为类型注释,而不是因为用于创建函数的表达式
与您的示例一样,这个示例是不可靠的,因为any
类型在设计上是不可靠的。如果希望编译器检查代码的类型安全性,则不应直接或间接使用any
。您显式键入doSomething
作为获取任何参数的函数(const doSomething:ActionCreator
)const doSomething=(n:number)=>({type:DO\u SOMETHING,payload:n})作为常量代码>可能是您正在寻找的,但不确定..谢谢,这很有帮助。(). 由于ActionCreator
类型正式来自库,您建议不要使用它们吗?如果您想从自己的代码调用这些函数(而不是将它们作为回调传递),那么您可以使用在不编写类型注释的情况下推断出的更具体的类型,然后您仍然可以将它们作为回调传递给API,因为它们仍然可以分配给API期望的不太特定的函数类型。