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

Typescript: Passing a callback instead of a function reference causes the result to be of a type unknown

提问人:Ytus 提问时间:2/16/2023 更新时间:2/16/2023 访问量:228

问:

在下面的例子中,类型是 a(没关系),但 的类型是 。并且行上有一个 TS 错误:astringbunknownx => doSomething(x)

“unknown”类型的参数不能分配给“string”类型的参数。(2345)

(如果下面的代码看起来不是很有用,那是因为它是具有相同问题的真实代码的极其简化的版本。

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")

TS 游乐场

我的问题是:

  1. 为什么更改为会引入错误?returnF(doSomething)returnF(x => doSomething(x))
  2. 有没有办法更改代码,以便我仍然可以使用,但我不必在每个地方指定类型,在哪里使用?returnF(x => doSomething(x))<a>returnF
TypeScript 回调

评论


答:

0赞 Eldar 2/16/2023 #1

因为是一个匿名函数,并且没有为参数指定类型。 是未指定参数的默认值。如果你想让它正常工作,你应该明确指定类型,就像x => doSomething(x)xunknown(x:string) => doSomething(x)