Javascript TypeScript,未定义的具体值

Javascript TypeScript,未定义的具体值,javascript,reactjs,typescript,react-hooks,Javascript,Reactjs,Typescript,React Hooks,我如何从一个潜在的未定义值中得到我可以分配给状态的东西?我知道数据在那里,但我不能通过先检查来禁用typescript错误 我正在尝试将staleModes置于状态,以便可以呈现每个项的控件: const temps = useSelector((state: RootState) => selectTemps(selectSlss(state))); const proposedStates = temps?.proposedStates; const staleModes = pr

我如何从一个潜在的未定义值中得到我可以分配给状态的东西?我知道数据在那里,但我不能通过先检查来禁用typescript错误

我正在尝试将staleModes置于状态,以便可以呈现每个项的控件:

const temps = useSelector((state: RootState) => selectTemps(selectSlss(state)));

const proposedStates = temps?.proposedStates;

const staleModes = proposedStates?.map(a => a.stale.mode);

const [proposedListStale, setProposedListStale] = useState<string[]>(staleModes);
const temps=useSelector((状态:RootState)=>selectTemps(selectSlss(状态));
const proposedStates=临时?proposedStates;
const staleModes=proposedStates?.map(a=>a.stale.mode);
const[proposedListStale,setProposedListStale]=useState(staleModes);
它在这里抱怨staleModes:useState(staleModes)

错误是: 类型为“(string | undefined)[| undefined”的参数不能分配给类型为“string[]|”(()=>string[])的参数。
类型“undefined”不能分配给类型“string[]|(()=>string[])。

可选链接可能会导致
staleModes
被分配
undefined
。如果由于属性可能不存在而确实需要可选链接,则可以使用空数组进行替换

由于
模式
也可能是
未定义的
,请将其替换为空字符串:

const staleModes = proposedStates?.map(a => a.stale.mode ?? '') ?? [];
但是,如果您确定属性和数据存在,请删除可选链接并改用类型断言:

const temps = useSelector((state: RootState) => selectTemps(selectSlss(state)))!;

const staleModes = temps.proposedStates!.map(a => a.stale.mode);

可选链接是我分配proposedStates的唯一方法。它要求它不要说temps可能为null。这两种方法都没有改变staleModes的类型,它仍然是const storeModels:(string | undefined)[]并且无法在“useState(staleModes)”中分配。您确定
.mode
属性包含字符串,而不是
undefined
?模式可以是undefined:(属性)BaseReComponent.mode?:string |未定义我是否能够以某种方式将默认值分配给空字符串?是的,您可以在
.map
a.stale.mode???”中使用相同的技术谢谢!我没见过这种技术。我是一个老开发人员,学习打字脚本,这很痛苦。