我正在将一个React with TypeScript 项目迁移到使用hooks功能(React v16.7.0-alpha),但我无法弄清楚如何设置解构元素的类型。
这里是一个例子:
interface IUser {
name: string;
}
...
const [user, setUser] = useState({name: 'Jon'});
我想强制user
变量的类型为IUser
。我唯一成功的尝试是分两个阶段完成:首先进行类型设置,然后再进行初始化:
let user: IUser;
let setUser: any;
[user, setUser] = useState({name: 'Jon'});
但我相信有更好的方法。另外,setUser
应该被初始化为一个以 IUser
为输入并且返回值为空的函数。
此外,值得注意的是,使用 const [user, setUser] = useState({name: 'Jon'});
而没有任何初始化也可以正常工作,但如果它取决于一些属性,我想利用 TypeScript 强制进行类型检查。
感谢您的帮助。
IUser
所提供的内容。我几乎可以在那里放置任何东西,并且对setUser
的后续使用都会通过类型检查。 - oromeIUser
兼容的对象,也就是具有相同属性的对象。这被称为鸭子类型。 - Nurbol Alpysbayevtype MyType = MyObj[];
然后useState<MyType>
- Nurbol AlpysbayevuseState
返回一个类型良好的元组,分别赋值给[user, setUser]
,对 TypeScript 来说理解变量应该与元组成员具有相同的类型并不困难。不知道我是让你明白了还是让你更加困惑了。 - Nurbol Alpysbayev