TS不能将类型“any[]”分配给类型“never[]”
Posted 吴冬雪~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TS不能将类型“any[]”分配给类型“never[]”相关的知识,希望对你有一定的参考价值。
一、问题
在处理接口返回的数据,赋值给store中的数组时,报类型错误
data:
cateList: []
const getCateList = async () =>
const res = await fetchCateList() as any
if (res.code == 200)
this.cateList = res.data
二、原因
res已经定义了any类型,但是cateList的类型还没有定义,默认为never
三、解决
1、方式一 (TS断言 尖括号语法)
data:
cateList: <any>[]
,
2、方式二 (TS断言 as语法)
data:
cateList: [] as any
,
3、方式三 (TS接口 interface)
//接口返回的数据结构如下
res.data = [
id:'1',name:'xxx',level:1,
id:'2',name:'xxx',level:2,
id:'3',name:'xxx',level:3
]
//根据返回的数据结构定义对应的类型
interface ICateList
id: string
name: string
level:number
data:
cateList: [] as ICateList[],
,
参考:https://www.cnblogs.com/yangyukeke/p/16936550.html
反应类型错误“不可分配给'从不'类型的参数”
【中文标题】反应类型错误“不可分配给\'从不\'类型的参数”【英文标题】:React type error "not assignable to parameter of type 'never'"反应类型错误“不可分配给'从不'类型的参数” 【发布时间】:2021-11-12 04:13:06 【问题描述】:我想要做的是遍历当前的 posttype 和“产品”,但我正在努力处理这些类型。所以我得到了以下错误:
'Record
[]' 类型的参数不能分配给'never' 类型的参数。
关于这部分:
...pages.map((page) => (
我的代码:
const pages = useSelect((select) =>
const editor = select("core/editor");
const currentPostType: string = editor.getCurrentPostType();
const selectablePostTypes = [currentPostType, "products"];
const postList = [];
selectablePostTypes.forEach((singlePostType) =>
const records: Record<string, any>[] = select("core").getEntityRecords(
"postType",
singlePostType
);
postList.push(records);
);
);
// Make dropdown of pagesOptions
const pagesOptions = [
...[
value: "0",
label: __("No page selected", "demosite"),
,
],
...pages.map((page) => (
value: page.id,
label: page.title,
)),
];
添加有效的代码:
const pages = useSelect((select) =>
const editor = select("core/editor");
const postType: string = editor.getCurrentPostType();
const records: Record<string, any>[] = select("core").getEntityRecords(
"postType",
postType
);
return records
? records.map((record) => (
description: record.description,
id: record.id,
featuredMedia: record.featuredMedia,
link: record.link,
subtitle: record.subtitle,
title: record.title.rendered,
))
: [];
);
这里它针对一种帖子类型,即您当前正在编辑的帖子类型,但我想在一些帖子类型上循环。
例子:
const selectablePostTypes = ['page', 'post', 'product'];
【问题讨论】:
旁注:在那里你实际上有这个代码:const pagesOptions = [...[somevalue]]
,可以写成const pagesOptions = [somevalue]
假设useSelect
是一种效果,const pages = useSelect
看起来不正确。更重要的是,您传递给 useSelect
的函数不会返回任何内容。
能否请您提供 TS 操场上的最小可重现示例?
【参考方案1】:
这是你对postList
的初始化
const postList = [];
因为您没有为 typescript 提供任何值来“找出”应该属于该数组的内容的类型签名,所以它将其设置为
never[]
这意味着它禁止您向该空数组添加任何值。在此处添加类型
const postList: Record<string, any>[][] = [];
【讨论】:
以上是关于TS不能将类型“any[]”分配给类型“never[]”的主要内容,如果未能解决你的问题,请参考以下文章
TS 错误:由于 withRouter,类型 'unknown' 不可分配给类型 'FunctionComponent<any>
类型“typeof Row”不可分配给类型“ComponentType<ListChildComponentProps<any>> & ReactNode”。 TS27