在下面的例子中,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>
类型?
1条答案
按热度按时间n3ipq98p1#
因为
x => doSomething(x)
是匿名函数,并且没有为参数x
指定类型。unknown
是未指定参数的默认值。如果希望它正常工作,应像(x:string) => doSomething(x)
那样显式指定类型Play