Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在typescript中,函数类型优先于参数类型吗?_Typescript - Fatal编程技术网

在typescript中,函数类型优先于参数类型吗?

在typescript中,函数类型优先于参数类型吗?,typescript,Typescript,我正在尝试键入redux操作创建者: const DO\u SOMETHING='DO\u SOMETHING' 接口DoSomethingAction扩展了操作{ 有效载荷:编号 } const doSomething:ActionCreator=(n:number)=>({ 类型:做点什么, 有效载荷:n, }) 我原以为用doSomething('why')调用此函数会失败,但事实并非如此 据我所知,这是因为redux打字有: interface ActionCreator)类型注释始终

我正在尝试键入redux操作创建者:

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期望的不太特定的函数类型。