Typescript:传递回调而不是函数引用会导致结果为未知类型

ruyhziif  于 2023-02-17  发布在  TypeScript
关注(0)|答案(1)|浏览(145)

在下面的例子中,a的类型是string(没关系),但是b的类型是unknown,并且在x => doSomething(x)行有一个TS错误:
类型"unknown"的参数不能赋值给类型"string"的参数。(2345)
(If下面的代码看起来不是很有用,因为它是一个具有相同问题的真实代码的极其简化的版本。)

type F<a> = (x: a) => a

function returnF<a>(f: F<a>): F<a> {
    return f
}

function doSomething(s: string): string {
    return s
}

const a = returnF(  // 'a' is a string
    doSomething
)("A")

const b = returnF(  // 'b' is unknown
    x => doSomething(x)
)("B")

const c = returnF<string>(  // 'c' is a string
    x => doSomething(x)
)("C")

TSPlayground
我的问题是:
1.为什么将returnF(doSomething)更改为returnF(x => doSomething(x))会导致错误?
1.有没有办法修改代码,这样我仍然可以使用returnF(x => doSomething(x)),但不必在使用returnF的每个地方都指定<a>类型?

n3ipq98p

n3ipq98p1#

因为x => doSomething(x)是匿名函数,并且没有为参数x指定类型。unknown是未指定参数的默认值。如果希望它正常工作,应像(x:string) => doSomething(x)那样显式指定类型
Play

相关问题