reactjs - Typescript 和 React 使用空类型数组设置初始状态
问题描述
假设我有以下代码段:
interface State {
alarms: Alarm[];
}
export default class Alarms extends React.Component<{}, State> {
state = {
alarms: []
};
由于我试图设置alarms: []
Typescript 不喜欢它,因为[] != Alarm[]
. 我发现我可以使用alarms: new Array<Alarm>()
which 初始化一个空类型的数组,但是我不太喜欢这种语法 - 有没有更简单/更好的方法?
解决方案
问题是,当您在类中创建字段时,编译器将相应地键入该字段(使用显式类型或从初始化表达式中推断出的类型,例如在您的情况下)。
如果要重新声明该字段,则应明确指定类型:
export default class Alarms extends React.Component<{}, State> {
state: Readonly<State> = {
alarms: []
};
}
或者在构造函数中设置状态:
export default class Alarms extends React.Component<{}, State> {
constructor(p: {}) {
super(p);
this.state = {
alarms: []
};
}
}
您也可以将数组转换为预期的类型,但如果有很多字段,最好让编译器为您检查对象文字。
推荐阅读
- excel - Excel中的B:B是什么意思?
- python - 为什么我无法向 Tweepy(Twitter 的 API)发送请求突然失败?
- java - 如何将 Spring Boot 应用程序和 OpenCV 库部署到 heroku?
- sql - SQL 语句根据以前的条目返回数字并分组
- sql-server - 如何在 T-SQL 中将字符串转换为日期?
- c# - 观察垃圾回收(C#、MacOS、Visual Studio)(终结器、析构器)
- javascript - .removeAttr() 不从选项卡中删除数据切换
- c++ - 如何从函数返回 const char**?
- java - 为什么 GSON 没有从 JSON 文件中检索所有值?
- python - 带有条件边界的正则表达式?