gpt4 book ai didi

TypeScript:如何输入保护联合类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:28 26 4
gpt4 key购买 nike

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[]' 不可分配给类型为“Link”的参数

这个错误是可以理解的,因为映射器获取一个联合类型作为其参数,但只需要一个对象。这不是我在使用类型保护时所希望的。对此有什么想法吗?

最佳答案

似乎 TypeScript 1.4.0.0 没有推断 link 不是 Array 类型时必须是 Link 类型。一个小的改变应该可以解决这个问题:

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

关于TypeScript:如何输入保护联合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27818755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com