Typescript — Объект, возможно, «не определен» в интерфейсе

#angular

Вопрос:

В проекте Angular я использую интерфейс.

     export interface School {
      name: string = '';
      website: string;
      registrationNumber: string;
      dateEstablished: Date;
      address: string;
      country: [];
      companyLogo: any = '';
    
        clear() {
          this.name = '';
          this.website = '';
          this.registrationNumber = '';
          this.dateEstablished = null;
          this.address = '';
          this.country = [];
          this.companyLogo = '';
      }
    }
 

У меня две ошибки:

  1. Объект, возможно, «неопределен» — и все «это». Выделено

  2. Ожидается объявление или заявление.ts(1128) — и последняя закрывающая фигурная скобка выделена.

  3. ожидаемая подпись вызова: «очистить», чтобы иметь typedef (typedef)tslint(typedef)

Как мне получить это разрешение?

Спасибо

Комментарии:

1. Я могу ошибаться, но я не думаю, что интерфейс может содержать реализацию метода. Интерфейсы описывают элементы, которые должны присутствовать в конкретной реализации интерфейса. Они не содержат своих определений. Видели ли вы информацию, которая свидетельствует об обратном?

2. @JLRishe — Как лучше всего это сделать? Пожалуйста, посоветуйте

Ответ №1:

Вам нужна реализация этого интерфейса, как это:

файл: school.ts

 interface ISchool {
      name: string = '';
      website: string;
      registrationNumber: string;
      dateEstablished: Date;
      address: string;
      country: [];
      companyLogo: any = '';
    
      clear(): () => void; 

    }


export class School implements ISchool {

      // Declare all attributes here;
      public name: string = '';
      ...

      clear() {
          this.name = '';
          this.website = '';
          this.registrationNumber = '';
          this.dateEstablished = null;
          this.address = '';
          this.country = [];
          this.companyLogo = '';
      }

}
 

файл app.ts

 import {School} from 'school.ts';

const someSchool = new School();
someSchool.clear();
 

Это базовая технология объектной ориентации, поэтому я бы рекомендовал изучить использование классов вместе с интерфейсами.

Однако вам не нужен интерфейс, если у вас есть только один тип школы.

Комментарии:

1. Какой из двух (2) видов экспорта я использую? класс или интерфейс?

2. Вы должны создать экземпляр объекта класса school, например const someSchool = новая школа(); а затем вызвать someSchool.clear();

3. Извините, я не понимаю. Можете ли вы обновить код?