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