说我有以下代码段:
interface State {
alarms: Alarm[];
}
export default class Alarms extends React.Component<{}, State> {
state = {
alarms: []
};
由于我试图将alarms: []
的打字稿设置为[] != Alarm[]
,所以我不喜欢它。我发现我可以使用alarms: new Array<Alarm>()
来初始化一个空的类型化数组,但是我不太喜欢这种语法-有没有更简单/更好的方法?
答案 0 :(得分:23)
问题是,当您在类中创建字段时,编译器将相应地键入该字段(使用显式类型或从初始化表达式中推断出的类型,例如您的情况)。
如果要重新声明该字段,则应明确指定类型:
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: []
};
}
}
您也可以将数组转换为期望的类型,但是如果字段很多,最好让编译器为您检查对象文字。
答案 1 :(得分:5)
答案 2 :(得分:-1)
声明:
alarms: Array<Alarm>
状态初始化:
this.setState({
var1:'',
var2:''
});
我更喜欢上面的声明