Правильный способ объявления React реквизита в конструкторе, который никогда не используется - PullRequest
0 голосов
/ 28 августа 2018

Обычно, когда я не использую props в construtor, я могу спокойно оставить его пустым

constructor() {
    super()
}

Но TypeScript требует от вас его определения. Если я им не пользуюсь, я делаю что-то вроде этого:

constructor(_: never) {
    super(_)
}

Существует ли правильный и / или более формальный способ объявления аргумента, который вы никогда не используете?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Параметры функции могут быть подчеркнуты в TypeScript, если они не используются , чтобы избежать ошибки компиляции. _ name вводит в заблуждение, потому что оно не содержит информации и будет конфликтовать с другими именами свойств, если их больше. Поскольку свойства используются в качестве super аргументов, подчеркивание не требуется.

never не является правильным типом здесь, потому что это означает что-то еще, а не свойство, которое никогда не используется . Может конфликтовать с типами параметров родительского конструктора.

  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 });
  }
  ...
}
0 голосов
/ 28 августа 2018

Я бы дал параметру его обычное имя props для ясности и правильного типа. Утверждение, что оно имеет тип never, является неточным, поскольку never - это тип, который не имеет значений, и значение обязательно передается в конструктор во время выполнения; К сожалению, never не приводит к ошибке компиляции, основанной на особом способе обработки сценариями JSX элементов в TypeScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...