我认为以下代码将 type 分配string
给 type unknown
,但编译器给出了相反的错误消息。
let y: (arg: unknown) => any;
let y1: unknown
y = (s: string) => s // Type 'unknown' is not assignable to type 'string'.ts(2322)
y1 = "y1"
因为可以从其他地方调用函数。
以这个为例:
let y: (arg: unknown) => any = (arg) => arg
y(123) // fine
这是一个完全可以接受的调用y()
. unknown
可以是任何东西,所以传递一个数字就可以了。
现在这样做:
let y: (arg: unknown) => any = (arg) => arg
y = (s: string) => s.toUpperCase()
y(123) // crash
number
将不再是 for 的有效参数,y()
因为(s: string) => any
会让函数假设参数是 a string
,但这里不能保证。
这意味着函数类型中的参数类型unknown
必须可分配给您分配的参数类型string
(因为您仍然可以使用unknown
参数调用函数)。并且unknown
不可分配给string
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句