交叉类型的函数类型的行为与我期望的不同。拿这个样本:
var c: ((x: number) => void) = x => { };
这个编译得很好。 x
是lambda中的数字。
但这失败了:
var c: ((x: number) => void) & ((x: number | string) => void) = x => { };
它说“x含有'任意'类型”。 (使用--noExplicitAny进行编译。)
即便是同样的评论也失败了:
var c: ((x: number) => void) & ((x: number) => void) = x => { };
这意味着并非所有类型T
,T & T
都与T
相同,这真的很奇怪。
答案 0 :(得分:1)
我认为类型交叉不是以这种方式使用的。可能是编译器无法计算x的类型并且因为编译器选项而分配任何失败的。
为x本身定义多个类型也更加清晰,而不是加入两个函数的类型。
var c: ((x: number | string) => void) = x => { };