Typescript和React使用空的类型化数组设置初始状态

时间:2018-07-12 12:01:17

标签: reactjs typescript

说我有以下代码段:

interface State {
  alarms: Alarm[];
}
export default class Alarms extends React.Component<{}, State> {
  state = {
    alarms: []
  };

由于我试图将alarms: []的打字稿设置为[] != Alarm[],所以我不喜欢它。我发现我可以使用alarms: new Array<Alarm>()来初始化一个空的类型化数组,但是我不太喜欢这种语法-有没有更简单/更好的方法?

3 个答案:

答案 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)

alarms: [] as Alarm[]

为打字稿和您工作?

有关如何在Typescript中转换数组的问题,请参见以下问题:TypeScript casting arrays

答案 2 :(得分:-1)

声明:

alarms: Array<Alarm>

状态初始化:

this.setState({
var1:'',
var2:''
});

我更喜欢上面的声明