只读useState的Typescript包装函数

只读useState的Typescript包装函数,typescript,react-hooks,Typescript,React Hooks,我想创建一个包装函数useStateRO,它将所有属性标记为只读,这样只能使用setState更改状态,但不能为返回值创建正确的类型 import React,{useState,useffect}来自“React”; 从“react dom”导入{render}; 类型DeepReadonly=T扩展(推断R)[] ? 深层只读阵列 :T扩展函数 ? T :T扩展对象 ? DeepReadonlyObject :T; 函数useStateRO( 道具:T ):[DeepReadonly,Re

我想创建一个包装函数useStateRO,它将所有属性标记为只读,这样只能使用setState更改状态,但不能为返回值创建正确的类型

import React,{useState,useffect}来自“React”;
从“react dom”导入{render};
类型DeepReadonly=T扩展(推断R)[]
? 深层只读阵列
:T扩展函数
? T
:T扩展对象
? DeepReadonlyObject
:T;
函数useStateRO(
道具:T
):[DeepReadonly,React.Dispatch]{
返回useState(props);//需要修复
}
接口九{
x:数字;
}
函数App(){
const[test,setTest]=useState({x:1});
useffect(()=>{
setTest({x:2});
}, []);
console.log(test.x);
test.x=5;//应该是错误
返回Hi;
}
render(,document.getElementById(“根”));

像往常一样,在制作沙箱并制定问题后,自己寻找解决方案:/

function useStateRO<T>(props: T): [DeepReadonly<T>, React.Dispatch<React.SetStateAction<T>>] {
  return useState(props) as [DeepReadonly<T>, React.Dispatch<React.SetStateAction<T>>]
}
函数useStateRO(props:T):[DeepReadonly,React.Dispatch]{
将useState(props)返回为[DeepReadonly,React.Dispatch]
}
function useStateRO<T>(props: T): [DeepReadonly<T>, React.Dispatch<React.SetStateAction<T>>] {
  return useState(props) as [DeepReadonly<T>, React.Dispatch<React.SetStateAction<T>>]
}