函数compose
可以有一个对象或一个对象数组作为其参数。
在compose
中,类型保护区分对象和数组。该
函数mapper
只能处理对象,并且通过使用类型保护,只有对象可以使用它。
interface Link {
something: string;
}
function compose(link: Link|Link[]) {
if (link instanceof Array) {
R.map(function(l) {
return mapper(l);
}, link);
} else {
return mapper(link);
}
}
function mapper(link: Link) {
return link;
}
编译此示例会导致错误:
错误TS2345:类型'链接|的参数链路[]'不能分配给' Link'
类型的参数这个错误是可以理解的,因为mapper获取了一个union类型作为其参数,但只需要一个对象。这不是我在使用型号护罩时所希望的。有什么想法吗?
答案 0 :(得分:4)
似乎TypeScript 1.4.0.0并未推断link
类型Link
不属于类型Array
时必须属于function compose(link: Link|Link[]) {
if (link instanceof Array) {
R.map(function(l) {
return mapper(l);
}, link);
} else if (link instanceof Link) {
return mapper(link);
}
}
类型。一个小的改变应该解决:
return mapper(<Link> link);
或者,您可以断言类型:
{{1}}