Javascript 使用上下文和Typescript:Property';地图';不存在于类型';选项';

Javascript 使用上下文和Typescript:Property';地图';不存在于类型';选项';,javascript,reactjs,typescript,react-hooks,react-context,Javascript,Reactjs,Typescript,React Hooks,React Context,我正在开发一个React应用程序,其中包含一个可通过上下文访问的自定义挂钩。该应用程序使用Typescript并定义自定义类型,如Option,它是一个表示无线电元素或复选框状态的对象 概括地说,这些是代码遵循的步骤: 在包含自定义状态挂钩的组件树顶部创建上下文 自定义挂钩包含自定义类型脚本类型(选项) 在树下,组件读取自定义状态挂钩以渲染收音机或复选框 首先,它定义了带有上下文的自定义钩子,使其可用于其余组件。它还包括自定义选项类型: 从“React”导入React; //自定义选项类型

我正在开发一个React应用程序,其中包含一个可通过上下文访问的自定义挂钩。该应用程序使用Typescript并定义自定义类型,如Option,它是一个表示无线电元素或复选框状态的对象

概括地说,这些是代码遵循的步骤:

  • 在包含自定义状态挂钩的组件树顶部创建上下文
  • 自定义挂钩包含自定义类型脚本类型(选项)
  • 在树下,组件读取自定义状态挂钩以渲染收音机或复选框
首先,它定义了带有上下文的自定义钩子,使其可用于其余组件。它还包括自定义选项类型:

从“React”导入React;
//自定义选项类型
导出类型选项={
名称:字符串;
启用:布尔值;
选中:布尔值;
};
const FiltersContext=React.createContext(null);
函数useffilters(){
const context=React.useContext(FilterContext);
如果(!上下文){
抛出新错误(`useFilters必须在FiltersProvider`中使用);
}
const[filters,setFilters]=上下文;
返回{
过滤器,
设置过滤器
};
}
函数过滤器提供程序(道具:任意){
//准备默认选项数组
常量选项:选项[]=[
{
名称:“选项1”,
启用:对,
核对:正确
},
{
名称:“选项2”,
启用:对,
勾选:假
}
];
//指定默认选项
const[filters,setFilters]=React.useState(选项);
const value=React.usemo(()=>[filters,setFilters],[filters]);
返回;
}
导出{FiltersProvider,useFilters};
在树的后面,我有一个组件,它读取定制钩子的状态。问题来了:

import*as React from“React”;
从“./../context/use filters”导入{Option,useFilters}”;
常量选项:React.FC=()=>{
常量{filters}=useFilters();
返回(
{filters.map((选项:option,键:number)=>(
{}} />
{option.name}
))}
);
};
导出默认选项;
代码从
useFilters
获取
filters
,然后通过它们创建
RadioButton
组件。Typescript抱怨说:

Property 'map' does not exist on type 'Option'
因此,据我所知,
过滤器
被检测为
选项
类型,而不是选项数组

如果在
返回
之前循环通过
过滤器
,选项会出现在控制台上,但Typescript仍会抱怨该错误:

filters.map((option: Option) => console.log(option.name));
我肯定我误解了一些非常重要的事情,所以我事先请你原谅,但如果你能解释一下,我将非常感激


再次感谢

您的上下文类型错误,应该是这样的:

const FiltersContext = React.createContext<[Option[], Dispatch<SetStateAction<Option[]>>] | null>(null);
import { Dispatch, SetStateAction } from 'react';