通常,当我不在props
中使用construtor
时,可以放心地将其保留为空白
constructor() {
super()
}
但是TypeScript要求您定义它。如果我不使用它,那么我一直在做这样的事情:
constructor(_: never) {
super(_)
}
是否有正确和/或更正式的方式声明您从未使用过的参数?
答案 0 :(得分:2)
函数参数can be underscored in TypeScript if they aren't used以避免编译错误。 _
名称具有误导性,因为它不包含信息,如果有更多的名称,它将与其他属性名称冲突。由于属性用作super
参数,因此不需要强调。
never
在这里不是正确的类型,因为这意味着something else rather than a property that is never used。可能与父构造函数参数类型冲突。
constructor(...args) {
super(...args);
// ...
}
将是在JavaScript中执行此操作的正确方法,但是如果是必需的,则应在TypeScript super
中明确指定参数。这样的显式构造函数可以省略,因为默认情况下在未指定constructor
的情况下会这样做。
在React组件中很少需要显式构造函数。有效的唯一super
属性是props
。大多数初始化代码用于组件生命周期挂钩(不推荐使用componentWillMount
是唯一的例外),而实例属性可以在TypeScript中声明为类字段:
class SomeComponent extends React.Component {
state = {
foo: synchronousInitialization();
};
// isn't needed
/*
constructor(props) {
super(props);
}
*/
async componentDidMount() {
const bar = await asynchronousInitialization();
this.setState({ ...this.state, bar });
}
...
}
答案 1 :(得分:1)
为清楚起见和正确的类型,我将为参数指定其惯用名称props
。声称其类型为never
是不准确的,因为never
是没有值的类型,并且值肯定在运行时传递给构造函数;不幸的是,never
不会基于TypeScript处理JSX元素的特定方式而导致编译错误。