首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >类型为'any‘的参数不能赋给类型为’never‘的参数。is

类型为'any‘的参数不能赋给类型为’never‘的参数。is
EN

Stack Overflow用户
提问于 2019-06-25 08:17:52
回答 1查看 4.2K关注 0票数 0

我收到了警告Argument of type 'any' is not assignable to parameter of type 'never'.ts(2345) Object is of type 'unknown'.ts(2571)

这是我的请求正文:

代码语言:javascript
复制
{"A":[{"filter":[{"a":"a"}]},{"group":[{"a":"a"}]}],"B":[{"filter":[{"a":"a"}]},{"group":[{"a":"a"}]}], ...}

这是我的脚本:

代码语言:javascript
复制
var a = Object.entries(body).reduce((acc, [key, value]) => {                                                                    
 acc.filter.push(...value[0].filter);                                                                    
 acc.group.push(...value[1].group);
 return acc;
}, {filter: <any>[], group: <any>[]});

我认为警告来自...value[0].filter...value[1].group,因为key上变量类型为unknow,而[key, value]上的变量类型为value

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-25 09:01:48

首先,让我们使用一个const assertion来确保编译器理解body的每个属性都是一个tuple,其中第一个元素有一个filter属性,第二个元素有一个group属性。(如果这不是真的,那么您的value[0].filtervalue[1].group代码就不安全):

代码语言:javascript
复制
const body = {
  A: [{ filter: [{ a: "a" }] }, { group: [{ a: "a" }] }],
  B: [{ filter: [{ a: "a" }] }, { group: [{ a: "a" }] }]
} as const;

你遇到的问题是这样的:编译器认为你在调用array.reduce(callback, initialAccumulator),其中initialAccumulator是一个带有空数组的对象,并认为这些数组必须始终没有实际元素(例如,Array<never>)。当您尝试将数据推送到这样的数组中时,它会抱怨数据不是never。您需要使用某种方法来注释或断言累加器将保存某个对象的数组,如下所示:

代码语言:javascript
复制
interface Filter { a: string }; // some type for Filter
interface Group { a: string }; // some type for Group
interface FiltersAndGroups {
  filter: Filter[];
  group: Group[];
}

// manually specify FiltersAndGroups as the accumulator type:     
var a = Object.entries(body).reduce<FiltersAndGroups>(
  (acc, [key, value]) => {
    acc.filter.push(...value[0].filter);
    acc.group.push(...value[1].group);
    return acc;
  },
  { filter: [], group: [] } 
)

选择FilterGroupFiltersAndGroups类型来表示累加器类型,并且(如@ShanonJackson suggested)我们手动指定了reduce()数组的泛型参数,以关闭[]作为never[]数组的错误推断。

现在,它应该可以毫无抱怨地工作了。希望这能有所帮助。祝好运!

Link to code

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56745339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档